diff --git a/package-lock.json b/package-lock.json index f6c65ec1..01ff31a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13504,7 +13504,7 @@ }, "packages/algo-ts/dist": { "name": "@algorandfoundation/algorand-typescript", - "version": "0.0.1-alpha.22", + "version": "0.0.1-alpha.23", "dev": true, "peerDependencies": { "tslib": "^2.6.2" diff --git a/packages/algo-ts/package.json b/packages/algo-ts/package.json index 4c44b09d..6081536a 100644 --- a/packages/algo-ts/package.json +++ b/packages/algo-ts/package.json @@ -1,6 +1,6 @@ { "name": "@algorandfoundation/algorand-typescript", - "version": "0.0.1-alpha.22", + "version": "0.0.1-alpha.23", "description": "This package contains definitions for the types which comprise Algorand TypeScript which can be compiled to run on the Algorand Virtual Machine using the Puya compiler.", "private": false, "main": "index.js", diff --git a/packages/algo-ts/src/op.ts b/packages/algo-ts/src/op.ts index 42b17079..159c3337 100644 --- a/packages/algo-ts/src/op.ts +++ b/packages/algo-ts/src/op.ts @@ -2,6 +2,8 @@ import { ctxMgr } from './execution-context' import { AddwType, + AppOptedInType, + ArgType, BalanceType, Base64DecodeType, BitLengthType, @@ -37,6 +39,7 @@ import { ITxnType, JsonRefType, Keccak256Type, + LenType, MulwType, OnlineStakeType, OpsNamespace, @@ -82,6 +85,8 @@ const createObjectProxy = (name: TName) => { } export const addw: AddwType = createFunctionProxy('addw') +export const appOptedIn: AppOptedInType = createFunctionProxy('appOptedIn') +export const arg: ArgType = createFunctionProxy('arg') export const balance: BalanceType = createFunctionProxy('balance') export const base64Decode: Base64DecodeType = createFunctionProxy('base64Decode') export const bitLength: BitLengthType = createFunctionProxy('bitLength') @@ -109,6 +114,7 @@ export const gloadBytes: GloadBytesType = createFunctionProxy('gloadBytes') export const gloadUint64: GloadUint64Type = createFunctionProxy('gloadUint64') export const itob: ItobType = createFunctionProxy('itob') export const keccak256: Keccak256Type = createFunctionProxy('keccak256') +export const len: LenType = createFunctionProxy('len') export const minBalance: BalanceType = createFunctionProxy('minBalance') export const mulw: MulwType = createFunctionProxy('mulw') export const replace: ReplaceType = createFunctionProxy('replace') diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.approval.teal b/tests/approvals/out/abi-decorators/AbiDecorators.approval.teal index 82783ed5..b1ae87eb 100644 --- a/tests/approvals/out/abi-decorators/AbiDecorators.approval.teal +++ b/tests/approvals/out/abi-decorators/AbiDecorators.approval.teal @@ -1,39 +1,29 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::AbiDecorators.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock 0x151f7c75 txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - - -// tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: -constructor: - // tests/approvals/abi-decorators.algo.ts:4 - // export default class AbiDecorators extends Contract { - proto 0 0 - // tests/approvals/abi-decorators.algo.ts:16 - // globalValue = GlobalState({ initialValue: Uint64(123) }) - pushbytes "globalValue" - pushint 123 // 123 - app_global_put - retsub - -// tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/abi-decorators.algo.ts:4 // export default class AbiDecorators extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@9 + bz main_bare_routing@12 + +main_abi_routing@4: + // tests/approvals/abi-decorators.algo.ts:4 + // export default class AbiDecorators extends Contract { txna ApplicationArgs 0 pushbytes 0xf9020d5a // method "justNoop()void" pushbytes 0xe179f9d4 // method "createMethod()void" @@ -41,12 +31,23 @@ __puya_arc4_router__: pushbytes 0x14d1b6ea // method "overrideReadonlyName()uint64" pushbytes 0xc1367374 // method "methodWithDefaults(uint64,uint64,uint64)uint64" uncover 5 - match __puya_arc4_router___justNoop_route@2 __puya_arc4_router___createMethod_route@3 __puya_arc4_router___allActions_route@4 __puya_arc4_router___overrideReadonlyName_route@5 __puya_arc4_router___methodWithDefaults_route@6 - b __puya_arc4_router___switch_case_default@7 + match main_justNoop_route@5 main_createMethod_route@6 main_allActions_route@7 main_overrideReadonlyName_route@8 main_methodWithDefaults_route@9 -__puya_arc4_router___justNoop_route@2: - // tests/approvals/abi-decorators.algo.ts:5 - // @abimethod({ allowActions: 'NoOp' }) +main_switch_case_default@10: + +main_switch_case_next@11: + +main_after_if_else@13: + // tests/approvals/abi-decorators.algo.ts:4 + // export default class AbiDecorators extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14: + return + +main_methodWithDefaults_route@9: + // tests/approvals/abi-decorators.algo.ts:18 + // @abimethod({ defaultArguments: { a: { from: 'globalValue' }, b: { from: 'readonly' }, c: { constant: 145 } } }) txn OnCompletion intc_0 // NoOp == @@ -55,26 +56,49 @@ __puya_arc4_router___justNoop_route@2: intc_0 // 0 != assert // can only call when not creating - callsub justNoop + // tests/approvals/abi-decorators.algo.ts:4 + // export default class AbiDecorators extends Contract { + txna ApplicationArgs 1 + btoi + txna ApplicationArgs 2 + btoi + txna ApplicationArgs 3 + btoi + // tests/approvals/abi-decorators.algo.ts:18 + // @abimethod({ defaultArguments: { a: { from: 'globalValue' }, b: { from: 'readonly' }, c: { constant: 145 } } }) + uncover 2 + uncover 2 + uncover 2 + callsub methodWithDefaults + itob + bytec_0 // 0x151f7c75 + swap + concat + log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14 -__puya_arc4_router___createMethod_route@3: - // tests/approvals/abi-decorators.algo.ts:7 - // @abimethod({ onCreate: 'require' }) +main_overrideReadonlyName_route@8: + // tests/approvals/abi-decorators.algo.ts:11 + // @abimethod({ readonly: true, name: 'overrideReadonlyName' }) txn OnCompletion intc_0 // NoOp == assert // OnCompletion is not NoOp txn ApplicationID intc_0 // 0 - == - assert // can only call when creating - callsub createMethod + != + assert // can only call when not creating + callsub readonly + itob + bytec_0 // 0x151f7c75 + swap + concat + log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14 -__puya_arc4_router___allActions_route@4: +main_allActions_route@7: // tests/approvals/abi-decorators.algo.ts:9 // @abimethod({ allowActions: ['NoOp', 'OptIn', 'CloseOut', 'DeleteApplication', 'UpdateApplication'] }) txn ApplicationID @@ -83,31 +107,26 @@ __puya_arc4_router___allActions_route@4: assert // can only call when not creating callsub allActions intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14 -__puya_arc4_router___overrideReadonlyName_route@5: - // tests/approvals/abi-decorators.algo.ts:11 - // @abimethod({ readonly: true, name: 'overrideReadonlyName' }) +main_createMethod_route@6: + // tests/approvals/abi-decorators.algo.ts:7 + // @abimethod({ onCreate: 'require' }) txn OnCompletion intc_0 // NoOp == assert // OnCompletion is not NoOp txn ApplicationID intc_0 // 0 - != - assert // can only call when not creating - callsub readonly - itob - bytec_0 // 0x151f7c75 - swap - concat - log + == + assert // can only call when creating + callsub createMethod intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14 -__puya_arc4_router___methodWithDefaults_route@6: - // tests/approvals/abi-decorators.algo.ts:18 - // @abimethod({ defaultArguments: { a: { from: 'globalValue' }, b: { from: 'readonly' }, c: { constant: 145 } } }) +main_justNoop_route@5: + // tests/approvals/abi-decorators.algo.ts:5 + // @abimethod({ allowActions: 'NoOp' }) txn OnCompletion intc_0 // NoOp == @@ -116,37 +135,24 @@ __puya_arc4_router___methodWithDefaults_route@6: intc_0 // 0 != assert // can only call when not creating - // tests/approvals/abi-decorators.algo.ts:4 - // export default class AbiDecorators extends Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/approvals/abi-decorators.algo.ts:18 - // @abimethod({ defaultArguments: { a: { from: 'globalValue' }, b: { from: 'readonly' }, c: { constant: 145 } } }) - uncover 2 - uncover 2 - uncover 2 - callsub methodWithDefaults - itob - bytec_0 // 0x151f7c75 - swap - concat - log + callsub justNoop intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__@14 -__puya_arc4_router___switch_case_default@7: - b __puya_arc4_router___after_if_else@10 +main_bare_routing@12: + b main_after_if_else@13 -__puya_arc4_router___bare_routing@9: -__puya_arc4_router___after_if_else@10: +// tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: +constructor: // tests/approvals/abi-decorators.algo.ts:4 // export default class AbiDecorators extends Contract { - intc_0 // 0 + proto 0 0 + // tests/approvals/abi-decorators.algo.ts:16 + // globalValue = GlobalState({ initialValue: Uint64(123) }) + pushbytes "globalValue" + pushint 123 // 123 + app_global_put retsub diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.arc32.json b/tests/approvals/out/abi-decorators/AbiDecorators.arc32.json index f1b65177..46f75a19 100644 --- a/tests/approvals/out/abi-decorators/AbiDecorators.arc32.json +++ b/tests/approvals/out/abi-decorators/AbiDecorators.arc32.json @@ -49,8 +49,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2p1c3ROb29wX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlTWV0aG9kX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fYWxsQWN0aW9uc19yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fbWV0aG9kV2l0aERlZmF1bHRzX3JvdXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19qdXN0Tm9vcF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGp1c3ROb29wCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hbGxBY3Rpb25zX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nLCAnQ2xvc2VPdXQnLCAnRGVsZXRlQXBwbGljYXRpb24nLCAnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWxsQWN0aW9ucwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjExCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG5hbWU6ICdvdmVycmlkZVJlYWRvbmx5TmFtZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZG9ubHkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJpRGVjb3JhdG9ycyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgbWV0aG9kV2l0aERlZmF1bHRzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A5OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUtNgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICAvLyBwdWJsaWMganVzdE5vb3AoKTogdm9pZCB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5jcmVhdGVNZXRob2QoKSAtPiB2b2lkOgpjcmVhdGVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo3LTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlTWV0aG9kKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuYWxsQWN0aW9ucygpIC0+IHZvaWQ6CmFsbEFjdGlvbnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nLCAnQ2xvc2VPdXQnLCAnRGVsZXRlQXBwbGljYXRpb24nLCAnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgLy8gcHVibGljIGFsbEFjdGlvbnMoKTogdm9pZCB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5yZWFkb25seSgpIC0+IHVpbnQ2NDoKcmVhZG9ubHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMS0xMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICAvLyBwdWJsaWMgcmVhZG9ubHkoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmp1c3ROb29wKCkgLT4gdm9pZDoKanVzdE5vb3A6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1LTYKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgLy8gcHVibGljIGp1c3ROb29wKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY3JlYXRlTWV0aG9kKCkgLT4gdm9pZDoKY3JlYXRlTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ny04CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZU1ldGhvZCgpOiB2b2lkIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIC8vIHB1YmxpYyBhbGxBY3Rpb25zKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTEtMTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgbmFtZTogJ292ZXJyaWRlUmVhZG9ubHlOYW1lJyB9KQogICAgLy8gcHVibGljIHJlYWRvbmx5KCk6IHVpbnQ2NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gNQogICAgcHVzaGludCA1IC8vIDUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLm1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6Cm1ldGhvZFdpdGhEZWZhdWx0czoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIC8vIHB1YmxpYyBtZXRob2RXaXRoRGVmYXVsdHMoYTogdWludDY0LCBiOiB1aW50NjQsIGM6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gYSAqIGIgKyBjCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.arc56.json b/tests/approvals/out/abi-decorators/AbiDecorators.arc56.json index e95fb14e..d12e6b28 100644 --- a/tests/approvals/out/abi-decorators/AbiDecorators.arc56.json +++ b/tests/approvals/out/abi-decorators/AbiDecorators.arc56.json @@ -151,25 +151,25 @@ "sourceInfo": [ { "pc": [ - 108, - 123, - 148, - 168 + 80, + 120, + 154, + 171 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 128 + 159 ], "errorMessage": "can only call when creating" }, { "pc": [ - 113, - 138, - 153, - 173 + 85, + 125, + 142, + 176 ], "errorMessage": "can only call when not creating" } @@ -182,8 +182,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2p1c3ROb29wX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlTWV0aG9kX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fYWxsQWN0aW9uc19yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fbWV0aG9kV2l0aERlZmF1bHRzX3JvdXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19qdXN0Tm9vcF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGp1c3ROb29wCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hbGxBY3Rpb25zX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nLCAnQ2xvc2VPdXQnLCAnRGVsZXRlQXBwbGljYXRpb24nLCAnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWxsQWN0aW9ucwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjExCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUsIG5hbWU6ICdvdmVycmlkZVJlYWRvbmx5TmFtZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZG9ubHkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJpRGVjb3JhdG9ycyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgbWV0aG9kV2l0aERlZmF1bHRzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A5OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuanVzdE5vb3AoKSAtPiB2b2lkOgpqdXN0Tm9vcDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUtNgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICAvLyBwdWJsaWMganVzdE5vb3AoKTogdm9pZCB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5jcmVhdGVNZXRob2QoKSAtPiB2b2lkOgpjcmVhdGVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo3LTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlTWV0aG9kKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuYWxsQWN0aW9ucygpIC0+IHZvaWQ6CmFsbEFjdGlvbnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nLCAnQ2xvc2VPdXQnLCAnRGVsZXRlQXBwbGljYXRpb24nLCAnVXBkYXRlQXBwbGljYXRpb24nXSB9KQogICAgLy8gcHVibGljIGFsbEFjdGlvbnMoKTogdm9pZCB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5yZWFkb25seSgpIC0+IHVpbnQ2NDoKcmVhZG9ubHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMS0xMgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICAvLyBwdWJsaWMgcmVhZG9ubHkoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiA1CiAgICBwdXNoaW50IDUgLy8gNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMubWV0aG9kV2l0aERlZmF1bHRzKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IHVpbnQ2NDoKbWV0aG9kV2l0aERlZmF1bHRzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGE6IHsgZnJvbTogJ2dsb2JhbFZhbHVlJyB9LCBiOiB7IGZyb206ICdyZWFkb25seScgfSwgYzogeyBjb25zdGFudDogMTQ1IH0gfSB9KQogICAgLy8gcHVibGljIG1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBhICogYiArIGMKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICAqCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTIKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmOTAyMGQ1YSAvLyBtZXRob2QgImp1c3ROb29wKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTE3OWY5ZDQgLy8gbWV0aG9kICJjcmVhdGVNZXRob2QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2M2MyN2FiYSAvLyBtZXRob2QgImFsbEFjdGlvbnMoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHgxNGQxYjZlYSAvLyBtZXRob2QgIm92ZXJyaWRlUmVhZG9ubHlOYW1lKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMTM2NzM3NCAvLyBtZXRob2QgIm1ldGhvZFdpdGhEZWZhdWx0cyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fanVzdE5vb3Bfcm91dGVANSBtYWluX2NyZWF0ZU1ldGhvZF9yb3V0ZUA2IG1haW5fYWxsQWN0aW9uc19yb3V0ZUA3IG1haW5fb3ZlcnJpZGVSZWFkb25seU5hbWVfcm91dGVAOCBtYWluX21ldGhvZFdpdGhEZWZhdWx0c19yb3V0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBBYmlEZWNvcmF0b3JzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl9tZXRob2RXaXRoRGVmYXVsdHNfcm91dGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYTogeyBmcm9tOiAnZ2xvYmFsVmFsdWUnIH0sIGI6IHsgZnJvbTogJ3JlYWRvbmx5JyB9LCBjOiB7IGNvbnN0YW50OiAxNDUgfSB9IH0pCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIG1ldGhvZFdpdGhEZWZhdWx0cwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX292ZXJyaWRlUmVhZG9ubHlOYW1lX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlLCBuYW1lOiAnb3ZlcnJpZGVSZWFkb25seU5hbWUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRvbmx5CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWxsQWN0aW9uc19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFsbEFjdGlvbnMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QWJpRGVjb3JhdG9ycy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9jcmVhdGVNZXRob2Rfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlTWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fanVzdE5vb3Bfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBqdXN0Tm9vcAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEFiaURlY29yYXRvcnMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE2CiAgICAvLyBnbG9iYWxWYWx1ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMTIzKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxWYWx1ZSIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmp1c3ROb29wKCkgLT4gdm9pZDoKanVzdE5vb3A6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1LTYKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgLy8gcHVibGljIGp1c3ROb29wKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMuY3JlYXRlTWV0aG9kKCkgLT4gdm9pZDoKY3JlYXRlTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ny04CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZU1ldGhvZCgpOiB2b2lkIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLmFsbEFjdGlvbnMoKSAtPiB2b2lkOgphbGxBY3Rpb25zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJywgJ0Nsb3NlT3V0JywgJ0RlbGV0ZUFwcGxpY2F0aW9uJywgJ1VwZGF0ZUFwcGxpY2F0aW9uJ10gfSkKICAgIC8vIHB1YmxpYyBhbGxBY3Rpb25zKCk6IHZvaWQge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkFiaURlY29yYXRvcnMucmVhZG9ubHkoKSAtPiB1aW50NjQ6CnJlYWRvbmx5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MTEtMTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSwgbmFtZTogJ292ZXJyaWRlUmVhZG9ubHlOYW1lJyB9KQogICAgLy8gcHVibGljIHJlYWRvbmx5KCk6IHVpbnQ2NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gNQogICAgcHVzaGludCA1IC8vIDUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpBYmlEZWNvcmF0b3JzLm1ldGhvZFdpdGhEZWZhdWx0cyhhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6Cm1ldGhvZFdpdGhEZWZhdWx0czoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBhOiB7IGZyb206ICdnbG9iYWxWYWx1ZScgfSwgYjogeyBmcm9tOiAncmVhZG9ubHknIH0sIGM6IHsgY29uc3RhbnQ6IDE0NSB9IH0gfSkKICAgIC8vIHB1YmxpYyBtZXRob2RXaXRoRGVmYXVsdHMoYTogdWludDY0LCBiOiB1aW50NjQsIGM6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gYSAqIGIgKyBjCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQQVH3x1MRhAAAOIAKcxGyITQQCdNhoAgAT5Ag1agAThefnUgARjwnq6gAQU0bbqgATBNnN0TwWOBQBdAEwAQAAqAAIiQzEZIhJEMRgiE0Q2GgEXNhoCFzYaAxdPAk8CTwKIAHYWKExQsCNC/9cxGSISRDEYIhNEiABaFihMULAjQv/BMRgiE0SIAEUjQv+1MRkiEkQxGCISRIgAMCNC/6QxGSISRDEYIhNEiAAbI0L/k0L/j4oAAIALZ2xvYmFsVmFsdWWBe2eJigAAiYoAAImKAACJigABgQWJigMBi/2L/guL/wiJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.clear.teal b/tests/approvals/out/abi-decorators/AbiDecorators.clear.teal index 2998c6e5..a4d58047 100644 --- a/tests/approvals/out/abi-decorators/AbiDecorators.clear.teal +++ b/tests/approvals/out/abi-decorators/AbiDecorators.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::AbiDecorators.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir b/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir new file mode 100644 index 00000000..ca6cfa91 --- /dev/null +++ b/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.approval.0.ssa.ir @@ -0,0 +1,108 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: + block@0: // L4 + (app_global_put "globalValue" 123u) + return + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@9 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "justNoop()void" => block@2, method "createMethod()void" => block@3, method "allActions()void" => block@4, method "overrideReadonlyName()uint64" => block@5, method "methodWithDefaults(uint64,uint64,uint64)uint64" => block@6, * => block@7} + block@2: // justNoop_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/abi-decorators.algo.ts::AbiDecorators.justNoop() + return 1u + block@3: // createMethod_route_L7 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/abi-decorators.algo.ts::AbiDecorators.createMethod() + return 1u + block@4: // allActions_route_L9 + let tmp%11#0: uint64 = (txn ApplicationID) + let tmp%12#0: bool = (!= tmp%11#0 0u) + (assert tmp%12#0) // can only call when not creating + tests/approvals/abi-decorators.algo.ts::AbiDecorators.allActions() + return 1u + block@5: // overrideReadonlyName_route_L11 + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 NoOp) + (assert tmp%14#0) // OnCompletion is not NoOp + let tmp%15#0: uint64 = (txn ApplicationID) + let tmp%16#0: bool = (!= tmp%15#0 0u) + (assert tmp%16#0) // can only call when not creating + let to_encode%0#0: uint64 = tests/approvals/abi-decorators.algo.ts::AbiDecorators.readonly() + let val_as_bytes%0#0: bytes = (itob to_encode%0#0) + let tmp%17#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%17#0) + return 1u + block@6: // methodWithDefaults_route_L18 + let tmp%18#0: uint64 = (txn OnCompletion) + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes = (txna ApplicationArgs 1) + let tmp%23#0: uint64 = (btoi tmp%22#0) + let tmp%24#0: bytes = (txna ApplicationArgs 2) + let tmp%25#0: uint64 = (btoi tmp%24#0) + let tmp%26#0: bytes = (txna ApplicationArgs 3) + let tmp%27#0: uint64 = (btoi tmp%26#0) + let to_encode%1#0: uint64 = tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefaults(tmp%23#0, tmp%25#0, tmp%27#0) + let val_as_bytes%1#0: bytes = (itob to_encode%1#0) + let tmp%28#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%28#0) + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@10 + block@9: // bare_routing_L4 + goto block@10 + block@10: // after_if_else_L4 + return 0u + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.justNoop() -> void: + block@0: // L5 + return + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.createMethod() -> void: + block@0: // L7 + return + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.allActions() -> void: + block@0: // L9 + return + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.readonly() -> uint64: + block@0: // L11 + return 5u + +subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefaults(a: uint64, b: uint64, c: uint64) -> uint64: + block@0: // L18 + let tmp%0#0: uint64 = (* a#0 b#0) + let tmp%1#0: uint64 = (+ tmp%0#0 c#0) + return tmp%1#0 \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.clear.0.ssa.ir b/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/abi-decorators/AbiDecorators.ir/AbiDecorators.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/AbiDecorators.ssa.ir b/tests/approvals/out/abi-decorators/AbiDecorators.ssa.ir deleted file mode 100644 index 0c34977e..00000000 --- a/tests/approvals/out/abi-decorators/AbiDecorators.ssa.ir +++ /dev/null @@ -1,115 +0,0 @@ -contract tests/approvals/abi-decorators.algo.ts::AbiDecorators: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.constructor() -> void: - block@0: // L4 - (app_global_put "globalValue" 123u) - return - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@9 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "justNoop()void" => block@2, method "createMethod()void" => block@3, method "allActions()void" => block@4, method "overrideReadonlyName()uint64" => block@5, method "methodWithDefaults(uint64,uint64,uint64)uint64" => block@6, * => block@7} - block@2: // justNoop_route_L5 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/abi-decorators.algo.ts::AbiDecorators.justNoop() - return 1u - block@3: // createMethod_route_L7 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 NoOp) - (assert tmp%8#0) // OnCompletion is not NoOp - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/abi-decorators.algo.ts::AbiDecorators.createMethod() - return 1u - block@4: // allActions_route_L9 - let tmp%11#0: uint64 = (txn ApplicationID) - let tmp%12#0: bool = (!= tmp%11#0 0u) - (assert tmp%12#0) // can only call when not creating - tests/approvals/abi-decorators.algo.ts::AbiDecorators.allActions() - return 1u - block@5: // overrideReadonlyName_route_L11 - let tmp%13#0: uint64 = (txn OnCompletion) - let tmp%14#0: bool = (== tmp%13#0 NoOp) - (assert tmp%14#0) // OnCompletion is not NoOp - let tmp%15#0: uint64 = (txn ApplicationID) - let tmp%16#0: bool = (!= tmp%15#0 0u) - (assert tmp%16#0) // can only call when not creating - let to_encode%0#0: uint64 = tests/approvals/abi-decorators.algo.ts::AbiDecorators.readonly() - let val_as_bytes%0#0: bytes = (itob to_encode%0#0) - let tmp%17#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%17#0) - return 1u - block@6: // methodWithDefaults_route_L18 - let tmp%18#0: uint64 = (txn OnCompletion) - let tmp%19#0: bool = (== tmp%18#0 NoOp) - (assert tmp%19#0) // OnCompletion is not NoOp - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (!= tmp%20#0 0u) - (assert tmp%21#0) // can only call when not creating - let tmp%22#0: bytes = (txna ApplicationArgs 1) - let tmp%23#0: uint64 = (btoi tmp%22#0) - let tmp%24#0: bytes = (txna ApplicationArgs 2) - let tmp%25#0: uint64 = (btoi tmp%24#0) - let tmp%26#0: bytes = (txna ApplicationArgs 3) - let tmp%27#0: uint64 = (btoi tmp%26#0) - let to_encode%1#0: uint64 = tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefaults(tmp%23#0, tmp%25#0, tmp%27#0) - let val_as_bytes%1#0: bytes = (itob to_encode%1#0) - let tmp%28#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) - (log tmp%28#0) - return 1u - block@7: // switch_case_default_L4 - goto block@8 - block@8: // switch_case_next_L4 - goto block@10 - block@9: // bare_routing_L4 - goto block@10 - block@10: // after_if_else_L4 - return 0u - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.justNoop() -> void: - block@0: // L5 - return - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.createMethod() -> void: - block@0: // L7 - return - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.allActions() -> void: - block@0: // L9 - return - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.readonly() -> uint64: - block@0: // L11 - return 5u - - subroutine tests/approvals/abi-decorators.algo.ts::AbiDecorators.methodWithDefaults(a: uint64, b: uint64, c: uint64) -> uint64: - block@0: // L18 - let tmp%0#0: uint64 = (* a#0 b#0) - let tmp%1#0: uint64 = (+ tmp%0#0 c#0) - return tmp%1#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/BaseAbi.approval.teal b/tests/approvals/out/abi-decorators/BaseAbi.approval.teal index 1f19144d..fdb82261 100644 --- a/tests/approvals/out/abi-decorators/BaseAbi.approval.teal +++ b/tests/approvals/out/abi-decorators/BaseAbi.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::BaseAbi.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/abi-decorators.algo.ts:36 // export class BaseAbi extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/abi-decorators.algo.ts:36 + // export class BaseAbi extends Contract { txna ApplicationArgs 0 pushbytes 0x1e29ffff // method "someMethod()string" swap - match __puya_arc4_router___someMethod_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_someMethod_route@3 + +main_switch_case_default@4: -__puya_arc4_router___someMethod_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/abi-decorators.algo.ts:36 + // export class BaseAbi extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__@11: + return + +main_someMethod_route@3: // tests/approvals/abi-decorators.algo.ts:37 // @abimethod({ allowActions: 'OptIn' }) txn OnCompletion @@ -44,21 +56,22 @@ __puya_arc4_router___someMethod_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/abi-decorators.algo.ts:36 // export class BaseAbi extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/abi-decorators.algo.ts:36 // export class BaseAbi extends Contract { txn ApplicationID @@ -67,15 +80,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/abi-decorators.algo.ts:36 - // export class BaseAbi extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__@11 // tests/approvals/abi-decorators.algo.ts::BaseAbi.someMethod() -> bytes: diff --git a/tests/approvals/out/abi-decorators/BaseAbi.arc32.json b/tests/approvals/out/abi-decorators/BaseAbi.arc32.json index a058512c..8c699c67 100644 --- a/tests/approvals/out/abi-decorators/BaseAbi.arc32.json +++ b/tests/approvals/out/abi-decorators/BaseAbi.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgxZTI5ZmZmZiAvLyBtZXRob2QgInNvbWVNZXRob2QoKXN0cmluZyIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3NvbWVNZXRob2Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3NvbWVNZXRob2Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM3LTM4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozOQogICAgLy8gcmV0dXJuICdiYXNlLWFiaTpvcHRpbicKICAgIHB1c2hieXRlcyAiYmFzZS1hYmk6b3B0aW4iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgxZTI5ZmZmZiAvLyBtZXRob2QgInNvbWVNZXRob2QoKXN0cmluZyIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc29tZU1ldGhvZF9yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHNvbWVNZXRob2QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMQoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM2CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZUFiaSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkJhc2VBYmkuc29tZU1ldGhvZCgpIC0+IGJ5dGVzOgpzb21lTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzctMzgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNvbWVNZXRob2QoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM5CiAgICAvLyByZXR1cm4gJ2Jhc2UtYWJpOm9wdGluJwogICAgcHVzaGJ5dGVzICJiYXNlLWFiaTpvcHRpbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM2CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZUFiaSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/abi-decorators/BaseAbi.arc56.json b/tests/approvals/out/abi-decorators/BaseAbi.arc56.json index e0ad8059..7ae3ebb5 100644 --- a/tests/approvals/out/abi-decorators/BaseAbi.arc56.json +++ b/tests/approvals/out/abi-decorators/BaseAbi.arc56.json @@ -57,19 +57,19 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not OptIn" }, { "pc": [ - 86 + 77 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" } @@ -82,8 +82,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgxZTI5ZmZmZiAvLyBtZXRob2QgInNvbWVNZXRob2QoKXN0cmluZyIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3NvbWVNZXRob2Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3NvbWVNZXRob2Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM3LTM4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozOQogICAgLy8gcmV0dXJuICdiYXNlLWFiaTpvcHRpbicKICAgIHB1c2hieXRlcyAiYmFzZS1hYmk6b3B0aW4iCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgxZTI5ZmZmZiAvLyBtZXRob2QgInNvbWVNZXRob2QoKXN0cmluZyIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc29tZU1ldGhvZF9yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzYKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlQWJpIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHNvbWVNZXRob2QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6QmFzZUFiaS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMQoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM2CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZUFiaSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozNgogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VBYmkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OkJhc2VBYmkuc29tZU1ldGhvZCgpIC0+IGJ5dGVzOgpzb21lTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzctMzgKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIC8vIHNvbWVNZXRob2QoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM5CiAgICAvLyByZXR1cm4gJ2Jhc2UtYWJpOm9wdGluJwogICAgcHVzaGJ5dGVzICJiYXNlLWFiaTpvcHRpbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpCYXNlQWJpLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjM2CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZUFiaSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQAyNhoAgAQeKf//TI4BAAIiQzEZIxJEMRgiE0SIACxJFRZXBgJMUIAEFR98dUxQsCNC/90xGSJMjgEAA0L/0TEYIhJEiAAYI0L/xooAAYAOYmFzZS1hYmk6b3B0aW6JigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/abi-decorators/BaseAbi.clear.teal b/tests/approvals/out/abi-decorators/BaseAbi.clear.teal index 476d21ba..a4d58047 100644 --- a/tests/approvals/out/abi-decorators/BaseAbi.clear.teal +++ b/tests/approvals/out/abi-decorators/BaseAbi.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::BaseAbi.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.approval.0.ssa.ir b/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.approval.0.ssa.ir new file mode 100644 index 00000000..b70d4d2b --- /dev/null +++ b/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.approval.0.ssa.ir @@ -0,0 +1,55 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__() -> bool: + block@0: // L36 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L36 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} + block@2: // someMethod_route_L37 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 OptIn) + (assert tmp%4#0) // OnCompletion is not OptIn + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::BaseAbi.someMethod() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // switch_case_default_L36 + goto block@4 + block@4: // switch_case_next_L36 + goto block@9 + block@5: // bare_routing_L36 + let tmp%8#0: uint64 = (txn OnCompletion) + switch tmp%8#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L36 + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/abi-decorators.algo.ts::BaseAbi.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L36 + goto block@8 + block@8: // switch_case_next_L36 + goto block@9 + block@9: // after_if_else_L36 + return 0u + +subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.someMethod() -> bytes: + block@0: // L37 + return "base-abi:optin" + +subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.__algots__.defaultCreate() -> void: + block@0: // L36 + return \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.clear.0.ssa.ir b/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/abi-decorators/BaseAbi.ir/BaseAbi.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/BaseAbi.ssa.ir b/tests/approvals/out/abi-decorators/BaseAbi.ssa.ir deleted file mode 100644 index ef7a80d9..00000000 --- a/tests/approvals/out/abi-decorators/BaseAbi.ssa.ir +++ /dev/null @@ -1,62 +0,0 @@ -contract tests/approvals/abi-decorators.algo.ts::BaseAbi: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.__puya_arc4_router__() -> bool: - block@0: // L36 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L36 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} - block@2: // someMethod_route_L37 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 OptIn) - (assert tmp%4#0) // OnCompletion is not OptIn - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::BaseAbi.someMethod() - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%7#0) - return 1u - block@3: // switch_case_default_L36 - goto block@4 - block@4: // switch_case_next_L36 - goto block@9 - block@5: // bare_routing_L36 - let tmp%8#0: uint64 = (txn OnCompletion) - switch tmp%8#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L36 - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/abi-decorators.algo.ts::BaseAbi.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L36 - goto block@8 - block@8: // switch_case_next_L36 - goto block@9 - block@9: // after_if_else_L36 - return 0u - - subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.someMethod() -> bytes: - block@0: // L37 - return "base-abi:optin" - - subroutine tests/approvals/abi-decorators.algo.ts::BaseAbi.__algots__.defaultCreate() -> void: - block@0: // L36 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.approval.teal b/tests/approvals/out/abi-decorators/OverloadedMethods.approval.teal index eb8f215c..6cea987b 100644 --- a/tests/approvals/out/abi-decorators/OverloadedMethods.approval.teal +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.approval.teal @@ -1,30 +1,42 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::OverloadedMethods.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock 0x151f7c75 - callsub __puya_arc4_router__ - return - -// tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/abi-decorators.algo.ts:24 // export class OverloadedMethods extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/abi-decorators.algo.ts:24 + // export class OverloadedMethods extends Contract { txna ApplicationArgs 0 pushbytes 0x7920dd57 // method "doThing(uint64)uint64" pushbytes 0x1cefbc5a // method "doThing(uint64,uint64)uint64" uncover 2 - match __puya_arc4_router___doThing_route@2 __puya_arc4_router___doThing_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_doThing_route@3 main_doThing_route@4 -__puya_arc4_router___doThing_route@2: - // tests/approvals/abi-decorators.algo.ts:25 +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/abi-decorators.algo.ts:24 + // export class OverloadedMethods extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__@12: + return + +main_doThing_route@4: + // tests/approvals/abi-decorators.algo.ts:30 // @abimethod({ name: 'doThing' }) txn OnCompletion intc_0 // NoOp @@ -38,19 +50,21 @@ __puya_arc4_router___doThing_route@2: // export class OverloadedMethods extends Contract { txna ApplicationArgs 1 btoi - // tests/approvals/abi-decorators.algo.ts:25 + txna ApplicationArgs 2 + btoi + // tests/approvals/abi-decorators.algo.ts:30 // @abimethod({ name: 'doThing' }) - callsub doThingOne + callsub doThingTwo itob bytec_0 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__@12 -__puya_arc4_router___doThing_route@3: - // tests/approvals/abi-decorators.algo.ts:30 +main_doThing_route@3: + // tests/approvals/abi-decorators.algo.ts:25 // @abimethod({ name: 'doThing' }) txn OnCompletion intc_0 // NoOp @@ -64,32 +78,31 @@ __puya_arc4_router___doThing_route@3: // export class OverloadedMethods extends Contract { txna ApplicationArgs 1 btoi - txna ApplicationArgs 2 - btoi - // tests/approvals/abi-decorators.algo.ts:30 + // tests/approvals/abi-decorators.algo.ts:25 // @abimethod({ name: 'doThing' }) - callsub doThingTwo + callsub doThingOne itob bytec_0 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__@12 -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 - -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/abi-decorators.algo.ts:24 // export class OverloadedMethods extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 -__puya_arc4_router_____algots__.defaultCreate@7: +main___algots__.defaultCreate@8: // tests/approvals/abi-decorators.algo.ts:24 // export class OverloadedMethods extends Contract { txn ApplicationID @@ -98,15 +111,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/abi-decorators.algo.ts:24 - // export class OverloadedMethods extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__@12 // tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingOne(x: uint64) -> uint64: diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.arc32.json b/tests/approvals/out/abi-decorators/OverloadedMethods.arc32.json index 03b1900e..552a3a00 100644 --- a/tests/approvals/out/abi-decorators/OverloadedMethods.arc32.json +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDc5MjBkZDU3IC8vIG1ldGhvZCAiZG9UaGluZyh1aW50NjQpdWludDY0IgogICAgcHVzaGJ5dGVzIDB4MWNlZmJjNWEgLy8gbWV0aG9kICJkb1RoaW5nKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kb1RoaW5nX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZG9UaGluZ19yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fZG9UaGluZ19yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjUKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgY2FsbHN1YiBkb1RoaW5nT25lCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kb1RoaW5nX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICBjYWxsc3ViIGRvVGhpbmdUd28KICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5kb1RoaW5nT25lKHg6IHVpbnQ2NCkgLT4gdWludDY0Ogpkb1RoaW5nT25lOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjUtMjYKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIC8vIGRvVGhpbmdPbmUoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiB4CiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5kb1RoaW5nVHdvKHg6IHVpbnQ2NCwgeTogdWludDY0KSAtPiB1aW50NjQ6CmRvVGhpbmdUd286CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgLy8gZG9UaGluZ1R3byh4OiB1aW50NjQsIHk6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMyCiAgICAvLyByZXR1cm4geCAqIHkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NzkyMGRkNTcgLy8gbWV0aG9kICJkb1RoaW5nKHVpbnQ2NCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHgxY2VmYmM1YSAvLyBtZXRob2QgImRvVGhpbmcodWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIG1haW5fZG9UaGluZ19yb3V0ZUAzIG1haW5fZG9UaGluZ19yb3V0ZUA0CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ok92ZXJsb2FkZWRNZXRob2RzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX2RvVGhpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIGNhbGxzdWIgZG9UaGluZ1R3bwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9kb1RoaW5nX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI1CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICBjYWxsc3ViIGRvVGhpbmdPbmUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuZG9UaGluZ09uZSh4OiB1aW50NjQpIC0+IHVpbnQ2NDoKZG9UaGluZ09uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI1LTI2CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICAvLyBkb1RoaW5nT25lKHg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4geAogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuZG9UaGluZ1R3byh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgLT4gdWludDY0Ogpkb1RoaW5nVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzAtMzEKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIC8vIGRvVGhpbmdUd28oeDogdWludDY0LCB5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMgogICAgLy8gcmV0dXJuIHggKiB5CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ok92ZXJsb2FkZWRNZXRob2RzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.arc56.json b/tests/approvals/out/abi-decorators/OverloadedMethods.arc56.json index 1ce33947..c0d244bf 100644 --- a/tests/approvals/out/abi-decorators/OverloadedMethods.arc56.json +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.arc56.json @@ -87,21 +87,21 @@ "sourceInfo": [ { "pc": [ - 56, - 80 + 48, + 78 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 122 + 115 ], "errorMessage": "can only call when creating" }, { "pc": [ - 61, - 85 + 53, + 83 ], "errorMessage": "can only call when not creating" } @@ -114,8 +114,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDc5MjBkZDU3IC8vIG1ldGhvZCAiZG9UaGluZyh1aW50NjQpdWludDY0IgogICAgcHVzaGJ5dGVzIDB4MWNlZmJjNWEgLy8gbWV0aG9kICJkb1RoaW5nKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kb1RoaW5nX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZG9UaGluZ19yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fZG9UaGluZ19yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjUKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgY2FsbHN1YiBkb1RoaW5nT25lCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kb1RoaW5nX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMAogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICBjYWxsc3ViIGRvVGhpbmdUd28KICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5kb1RoaW5nT25lKHg6IHVpbnQ2NCkgLT4gdWludDY0Ogpkb1RoaW5nT25lOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjUtMjYKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIC8vIGRvVGhpbmdPbmUoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjcKICAgIC8vIHJldHVybiB4CiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5kb1RoaW5nVHdvKHg6IHVpbnQ2NCwgeTogdWludDY0KSAtPiB1aW50NjQ6CmRvVGhpbmdUd286CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgLy8gZG9UaGluZ1R3byh4OiB1aW50NjQsIHk6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMyCiAgICAvLyByZXR1cm4geCAqIHkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NzkyMGRkNTcgLy8gbWV0aG9kICJkb1RoaW5nKHVpbnQ2NCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHgxY2VmYmM1YSAvLyBtZXRob2QgImRvVGhpbmcodWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIG1haW5fZG9UaGluZ19yb3V0ZUAzIG1haW5fZG9UaGluZ19yb3V0ZUA0CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ok92ZXJsb2FkZWRNZXRob2RzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX2RvVGhpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIGNhbGxzdWIgZG9UaGluZ1R3bwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpPdmVybG9hZGVkTWV0aG9kcy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9kb1RoaW5nX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNQogICAgLy8gQGFiaW1ldGhvZCh7IG5hbWU6ICdkb1RoaW5nJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBPdmVybG9hZGVkTWV0aG9kcyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI1CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICBjYWxsc3ViIGRvVGhpbmdPbmUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIE92ZXJsb2FkZWRNZXRob2RzIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuZG9UaGluZ09uZSh4OiB1aW50NjQpIC0+IHVpbnQ2NDoKZG9UaGluZ09uZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI1LTI2CiAgICAvLyBAYWJpbWV0aG9kKHsgbmFtZTogJ2RvVGhpbmcnIH0pCiAgICAvLyBkb1RoaW5nT25lKHg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4geAogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6T3ZlcmxvYWRlZE1ldGhvZHMuZG9UaGluZ1R3byh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgLT4gdWludDY0Ogpkb1RoaW5nVHdvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6MzAtMzEKICAgIC8vIEBhYmltZXRob2QoeyBuYW1lOiAnZG9UaGluZycgfSkKICAgIC8vIGRvVGhpbmdUd28oeDogdWludDY0LCB5OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czozMgogICAgLy8gcmV0dXJuIHggKiB5CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6Ok92ZXJsb2FkZWRNZXRob2RzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgT3ZlcmxvYWRlZE1ldGhvZHMgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQQVH3x1MRsiE0EAUTYaAIAEeSDdV4AEHO+8Wk8CjgIAIAACIkMxGSISRDEYIhNENhoBFzYaAheIAEAWKExQsCNC/+ExGSISRDEYIhNENhoBF4gAIBYoTFCwI0L/xzEZIkyOAQADQv+7MRgiEkSIABMjQv+wigEBi/+JigIBi/6L/wuJigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.clear.teal b/tests/approvals/out/abi-decorators/OverloadedMethods.clear.teal index ec824ec5..a4d58047 100644 --- a/tests/approvals/out/abi-decorators/OverloadedMethods.clear.teal +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::OverloadedMethods.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.approval.0.ssa.ir b/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.approval.0.ssa.ir new file mode 100644 index 00000000..1954014f --- /dev/null +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.approval.0.ssa.ir @@ -0,0 +1,75 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__() -> bool: + block@0: // L24 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L24 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "doThing(uint64)uint64" => block@2, method "doThing(uint64,uint64)uint64" => block@3, * => block@4} + block@2: // doThing_route_L25 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + let to_encode%0#0: uint64 = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingOne(tmp%8#0) + let val_as_bytes%0#0: bytes = (itob to_encode%0#0) + let tmp%9#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%9#0) + return 1u + block@3: // doThing_route_L30 + let tmp%10#0: uint64 = (txn OnCompletion) + let tmp%11#0: bool = (== tmp%10#0 NoOp) + (assert tmp%11#0) // OnCompletion is not NoOp + let tmp%12#0: uint64 = (txn ApplicationID) + let tmp%13#0: bool = (!= tmp%12#0 0u) + (assert tmp%13#0) // can only call when not creating + let tmp%14#0: bytes = (txna ApplicationArgs 1) + let tmp%15#0: uint64 = (btoi tmp%14#0) + let tmp%16#0: bytes = (txna ApplicationArgs 2) + let tmp%17#0: uint64 = (btoi tmp%16#0) + let to_encode%1#0: uint64 = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingTwo(tmp%15#0, tmp%17#0) + let val_as_bytes%1#0: bytes = (itob to_encode%1#0) + let tmp%18#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) + (log tmp%18#0) + return 1u + block@4: // switch_case_default_L24 + goto block@5 + block@5: // switch_case_next_L24 + goto block@10 + block@6: // bare_routing_L24 + let tmp%19#0: uint64 = (txn OnCompletion) + switch tmp%19#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L24 + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (== tmp%20#0 0u) + (assert tmp%21#0) // can only call when creating + tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L24 + goto block@9 + block@9: // switch_case_next_L24 + goto block@10 + block@10: // after_if_else_L24 + return 0u + +subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingOne(x: uint64) -> uint64: + block@0: // L25 + return x#0 + +subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingTwo(x: uint64, y: uint64) -> uint64: + block@0: // L30 + let tmp%0#0: uint64 = (* x#0 y#0) + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__algots__.defaultCreate() -> void: + block@0: // L24 + return \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.clear.0.ssa.ir b/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/abi-decorators/OverloadedMethods.ir/OverloadedMethods.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/OverloadedMethods.ssa.ir b/tests/approvals/out/abi-decorators/OverloadedMethods.ssa.ir deleted file mode 100644 index 0094dad3..00000000 --- a/tests/approvals/out/abi-decorators/OverloadedMethods.ssa.ir +++ /dev/null @@ -1,82 +0,0 @@ -contract tests/approvals/abi-decorators.algo.ts::OverloadedMethods: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__puya_arc4_router__() -> bool: - block@0: // L24 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L24 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "doThing(uint64)uint64" => block@2, method "doThing(uint64,uint64)uint64" => block@3, * => block@4} - block@2: // doThing_route_L25 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - let to_encode%0#0: uint64 = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingOne(tmp%8#0) - let val_as_bytes%0#0: bytes = (itob to_encode%0#0) - let tmp%9#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%9#0) - return 1u - block@3: // doThing_route_L30 - let tmp%10#0: uint64 = (txn OnCompletion) - let tmp%11#0: bool = (== tmp%10#0 NoOp) - (assert tmp%11#0) // OnCompletion is not NoOp - let tmp%12#0: uint64 = (txn ApplicationID) - let tmp%13#0: bool = (!= tmp%12#0 0u) - (assert tmp%13#0) // can only call when not creating - let tmp%14#0: bytes = (txna ApplicationArgs 1) - let tmp%15#0: uint64 = (btoi tmp%14#0) - let tmp%16#0: bytes = (txna ApplicationArgs 2) - let tmp%17#0: uint64 = (btoi tmp%16#0) - let to_encode%1#0: uint64 = tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingTwo(tmp%15#0, tmp%17#0) - let val_as_bytes%1#0: bytes = (itob to_encode%1#0) - let tmp%18#0: bytes = (concat 0x151f7c75 val_as_bytes%1#0) - (log tmp%18#0) - return 1u - block@4: // switch_case_default_L24 - goto block@5 - block@5: // switch_case_next_L24 - goto block@10 - block@6: // bare_routing_L24 - let tmp%19#0: uint64 = (txn OnCompletion) - switch tmp%19#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L24 - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (== tmp%20#0 0u) - (assert tmp%21#0) // can only call when creating - tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L24 - goto block@9 - block@9: // switch_case_next_L24 - goto block@10 - block@10: // after_if_else_L24 - return 0u - - subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingOne(x: uint64) -> uint64: - block@0: // L25 - return x#0 - - subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.doThingTwo(x: uint64, y: uint64) -> uint64: - block@0: // L30 - let tmp%0#0: uint64 = (* x#0 y#0) - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::OverloadedMethods.__algots__.defaultCreate() -> void: - block@0: // L24 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi.approval.teal b/tests/approvals/out/abi-decorators/SubAbi.approval.teal index e99fb29b..69c633dc 100644 --- a/tests/approvals/out/abi-decorators/SubAbi.approval.teal +++ b/tests/approvals/out/abi-decorators/SubAbi.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::SubAbi.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/abi-decorators.algo.ts:43 // export class SubAbi extends BaseAbi { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/abi-decorators.algo.ts:43 + // export class SubAbi extends BaseAbi { txna ApplicationArgs 0 pushbytes 0x1e29ffff // method "someMethod()string" swap - match __puya_arc4_router___someMethod_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_someMethod_route@3 + +main_switch_case_default@4: -__puya_arc4_router___someMethod_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/abi-decorators.algo.ts:43 + // export class SubAbi extends BaseAbi { + intc_0 // 0 + +main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__@11: + return + +main_someMethod_route@3: // tests/approvals/abi-decorators.algo.ts:44 // @abimethod({ allowActions: 'OptIn' }) txn OnCompletion @@ -44,21 +56,22 @@ __puya_arc4_router___someMethod_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/abi-decorators.algo.ts:43 // export class SubAbi extends BaseAbi { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/abi-decorators.algo.ts:43 // export class SubAbi extends BaseAbi { txn ApplicationID @@ -67,15 +80,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/abi-decorators.algo.ts:43 - // export class SubAbi extends BaseAbi { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__@11 // tests/approvals/abi-decorators.algo.ts::SubAbi.someMethod() -> bytes: diff --git a/tests/approvals/out/abi-decorators/SubAbi.arc32.json b/tests/approvals/out/abi-decorators/SubAbi.arc32.json index ec2a679e..a18b6a54 100644 --- a/tests/approvals/out/abi-decorators/SubAbi.arc32.json +++ b/tests/approvals/out/abi-decorators/SubAbi.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDQKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMSAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE9wdEluCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzb21lTWV0aG9kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpIGV4dGVuZHMgQmFzZUFiaSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaS5zb21lTWV0aG9kKCkgLT4gYnl0ZXM6CnNvbWVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0NC00NQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgLy8gc29tZU1ldGhvZCgpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDYKICAgIC8vIHJldHVybiAnc3ViLWFiaTpvcHRpbicKICAgIHB1c2hieXRlcyAic3ViLWFiaTpvcHRpbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zb21lTWV0aG9kX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3NvbWVNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpIGV4dGVuZHMgQmFzZUFiaSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQ0LTQ1CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0NgogICAgLy8gcmV0dXJuICdzdWItYWJpOm9wdGluJwogICAgcHVzaGJ5dGVzICJzdWItYWJpOm9wdGluIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/abi-decorators/SubAbi.arc56.json b/tests/approvals/out/abi-decorators/SubAbi.arc56.json index fef1ab07..11d2f4cf 100644 --- a/tests/approvals/out/abi-decorators/SubAbi.arc56.json +++ b/tests/approvals/out/abi-decorators/SubAbi.arc56.json @@ -57,19 +57,19 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not OptIn" }, { "pc": [ - 86 + 77 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" } @@ -82,8 +82,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDQKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMSAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE9wdEluCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzb21lTWV0aG9kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpIGV4dGVuZHMgQmFzZUFiaSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaS5zb21lTWV0aG9kKCkgLT4gYnl0ZXM6CnNvbWVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0NC00NQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgLy8gc29tZU1ldGhvZCgpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDYKICAgIC8vIHJldHVybiAnc3ViLWFiaTpvcHRpbicKICAgIHB1c2hieXRlcyAic3ViLWFiaTpvcHRpbiIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zb21lTWV0aG9kX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3NvbWVNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpIGV4dGVuZHMgQmFzZUFiaSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjQ0LTQ1CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzb21lTWV0aG9kKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0NgogICAgLy8gcmV0dXJuICdzdWItYWJpOm9wdGluJwogICAgcHVzaGJ5dGVzICJzdWItYWJpOm9wdGluIgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo0MwogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaSBleHRlbmRzIEJhc2VBYmkgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQAyNhoAgAQeKf//TI4BAAIiQzEZIxJEMRgiE0SIACxJFRZXBgJMUIAEFR98dUxQsCNC/90xGSJMjgEAA0L/0TEYIhJEiAAXI0L/xooAAYANc3ViLWFiaTpvcHRpbomKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/abi-decorators/SubAbi.clear.teal b/tests/approvals/out/abi-decorators/SubAbi.clear.teal index fa13f66b..a4d58047 100644 --- a/tests/approvals/out/abi-decorators/SubAbi.clear.teal +++ b/tests/approvals/out/abi-decorators/SubAbi.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::SubAbi.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.approval.0.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.approval.0.ssa.ir new file mode 100644 index 00000000..a5461487 --- /dev/null +++ b/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.approval.0.ssa.ir @@ -0,0 +1,55 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__() -> bool: + block@0: // L43 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L43 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} + block@2: // someMethod_route_L44 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 OptIn) + (assert tmp%4#0) // OnCompletion is not OptIn + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::SubAbi.someMethod() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // switch_case_default_L43 + goto block@4 + block@4: // switch_case_next_L43 + goto block@9 + block@5: // bare_routing_L43 + let tmp%8#0: uint64 = (txn OnCompletion) + switch tmp%8#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L43 + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/abi-decorators.algo.ts::SubAbi.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L43 + goto block@8 + block@8: // switch_case_next_L43 + goto block@9 + block@9: // after_if_else_L43 + return 0u + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.someMethod() -> bytes: + block@0: // L44 + return "sub-abi:optin" + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.__algots__.defaultCreate() -> void: + block@0: // L43 + return \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.clear.0.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/abi-decorators/SubAbi.ir/SubAbi.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi.ssa.ir deleted file mode 100644 index 49c5a702..00000000 --- a/tests/approvals/out/abi-decorators/SubAbi.ssa.ir +++ /dev/null @@ -1,62 +0,0 @@ -contract tests/approvals/abi-decorators.algo.ts::SubAbi: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.__puya_arc4_router__() -> bool: - block@0: // L43 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L43 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} - block@2: // someMethod_route_L44 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 OptIn) - (assert tmp%4#0) // OnCompletion is not OptIn - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::SubAbi.someMethod() - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%7#0) - return 1u - block@3: // switch_case_default_L43 - goto block@4 - block@4: // switch_case_next_L43 - goto block@9 - block@5: // bare_routing_L43 - let tmp%8#0: uint64 = (txn OnCompletion) - switch tmp%8#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L43 - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/abi-decorators.algo.ts::SubAbi.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L43 - goto block@8 - block@8: // switch_case_next_L43 - goto block@9 - block@9: // after_if_else_L43 - return 0u - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.someMethod() -> bytes: - block@0: // L44 - return "sub-abi:optin" - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi.__algots__.defaultCreate() -> void: - block@0: // L43 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi2.approval.teal b/tests/approvals/out/abi-decorators/SubAbi2.approval.teal index e4c5d10d..08484953 100644 --- a/tests/approvals/out/abi-decorators/SubAbi2.approval.teal +++ b/tests/approvals/out/abi-decorators/SubAbi2.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::SubAbi2.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/abi-decorators.algo.ts:50 // export class SubAbi2 extends BaseAbi { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/abi-decorators.algo.ts:50 + // export class SubAbi2 extends BaseAbi { txna ApplicationArgs 0 pushbytes 0x1e29ffff // method "someMethod()string" swap - match __puya_arc4_router___someMethod_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_someMethod_route@3 + +main_switch_case_default@4: -__puya_arc4_router___someMethod_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/abi-decorators.algo.ts:50 + // export class SubAbi2 extends BaseAbi { + intc_0 // 0 + +main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__@11: + return + +main_someMethod_route@3: // tests/approvals/abi-decorators.algo.ts:52 // someMethod(): string { txn OnCompletion @@ -44,21 +56,22 @@ __puya_arc4_router___someMethod_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/abi-decorators.algo.ts:50 // export class SubAbi2 extends BaseAbi { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/abi-decorators.algo.ts:50 // export class SubAbi2 extends BaseAbi { txn ApplicationID @@ -67,15 +80,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/abi-decorators.algo.ts:50 - // export class SubAbi2 extends BaseAbi { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__@11 // tests/approvals/abi-decorators.algo.ts::SubAbi2.someMethod() -> bytes: diff --git a/tests/approvals/out/abi-decorators/SubAbi2.arc32.json b/tests/approvals/out/abi-decorators/SubAbi2.arc32.json index b15e3043..9b3a78cd 100644 --- a/tests/approvals/out/abi-decorators/SubAbi2.arc32.json +++ b/tests/approvals/out/abi-decorators/SubAbi2.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NTIKICAgIC8vIHNvbWVNZXRob2QoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NTAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkyIGV4dGVuZHMgQmFzZUFiaSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkyLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUyCiAgICAvLyBzb21lTWV0aG9kKCk6IHN0cmluZyB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUzCiAgICAvLyByZXR1cm4gJ3N1Yi1hYmktMjpub29wJwogICAgcHVzaGJ5dGVzICJzdWItYWJpLTI6bm9vcCIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkyLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MWUyOWZmZmYgLy8gbWV0aG9kICJzb21lTWV0aG9kKClzdHJpbmciCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NvbWVNZXRob2Rfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MgogICAgLy8gc29tZU1ldGhvZCgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzb21lTWV0aG9kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaTIuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaTIuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5zb21lTWV0aG9kKCkgLT4gYnl0ZXM6CnNvbWVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MgogICAgLy8gc29tZU1ldGhvZCgpOiBzdHJpbmcgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MwogICAgLy8gcmV0dXJuICdzdWItYWJpLTI6bm9vcCcKICAgIHB1c2hieXRlcyAic3ViLWFiaS0yOm5vb3AiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/abi-decorators/SubAbi2.arc56.json b/tests/approvals/out/abi-decorators/SubAbi2.arc56.json index 068ed4eb..e9baf2e2 100644 --- a/tests/approvals/out/abi-decorators/SubAbi2.arc56.json +++ b/tests/approvals/out/abi-decorators/SubAbi2.arc56.json @@ -57,19 +57,19 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 86 + 77 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" } @@ -82,8 +82,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDFlMjlmZmZmIC8vIG1ldGhvZCAic29tZU1ldGhvZCgpc3RyaW5nIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc29tZU1ldGhvZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NTIKICAgIC8vIHNvbWVNZXRob2QoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc29tZU1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6NTAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJBYmkyIGV4dGVuZHMgQmFzZUFiaSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkyLnNvbWVNZXRob2QoKSAtPiBieXRlczoKc29tZU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUyCiAgICAvLyBzb21lTWV0aG9kKCk6IHN0cmluZyB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUzCiAgICAvLyByZXR1cm4gJ3N1Yi1hYmktMjpub29wJwogICAgcHVzaGJ5dGVzICJzdWItYWJpLTI6bm9vcCIKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjpTdWJBYmkyLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MWUyOWZmZmYgLy8gbWV0aG9kICJzb21lTWV0aG9kKClzdHJpbmciCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NvbWVNZXRob2Rfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hYmktZGVjb3JhdG9ycy5hbGdvLnRzOjUwCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQWJpMiBleHRlbmRzIEJhc2VBYmkgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl9zb21lTWV0aG9kX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MgogICAgLy8gc29tZU1ldGhvZCgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzb21lTWV0aG9kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaTIuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FiaS1kZWNvcmF0b3JzLmFsZ28udHM6OlN1YkFiaTIuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5zb21lTWV0aG9kKCkgLT4gYnl0ZXM6CnNvbWVNZXRob2Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MgogICAgLy8gc29tZU1ldGhvZCgpOiBzdHJpbmcgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MwogICAgLy8gcmV0dXJuICdzdWItYWJpLTI6bm9vcCcKICAgIHB1c2hieXRlcyAic3ViLWFiaS0yOm5vb3AiCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo6U3ViQWJpMi5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWJpLWRlY29yYXRvcnMuYWxnby50czo1MAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkFiaTIgZXh0ZW5kcyBCYXNlQWJpIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQAyNhoAgAQeKf//TI4BAAIiQzEZIhJEMRgiE0SIACxJFRZXBgJMUIAEFR98dUxQsCNC/90xGSJMjgEAA0L/0TEYIhJEiAAYI0L/xooAAYAOc3ViLWFiaS0yOm5vb3CJigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/abi-decorators/SubAbi2.clear.teal b/tests/approvals/out/abi-decorators/SubAbi2.clear.teal index 8fb2d8be..a4d58047 100644 --- a/tests/approvals/out/abi-decorators/SubAbi2.clear.teal +++ b/tests/approvals/out/abi-decorators/SubAbi2.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/abi-decorators.algo.ts::SubAbi2.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.approval.0.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.approval.0.ssa.ir new file mode 100644 index 00000000..14099d52 --- /dev/null +++ b/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.approval.0.ssa.ir @@ -0,0 +1,55 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__() -> bool: + block@0: // L50 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L50 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} + block@2: // someMethod_route_L52 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::SubAbi2.someMethod() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // switch_case_default_L50 + goto block@4 + block@4: // switch_case_next_L50 + goto block@9 + block@5: // bare_routing_L50 + let tmp%8#0: uint64 = (txn OnCompletion) + switch tmp%8#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L50 + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/abi-decorators.algo.ts::SubAbi2.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L50 + goto block@8 + block@8: // switch_case_next_L50 + goto block@9 + block@9: // after_if_else_L50 + return 0u + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.someMethod() -> bytes: + block@0: // L52 + return "sub-abi-2:noop" + +subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.__algots__.defaultCreate() -> void: + block@0: // L50 + return \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.clear.0.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/abi-decorators/SubAbi2.ir/SubAbi2.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/abi-decorators/SubAbi2.ssa.ir b/tests/approvals/out/abi-decorators/SubAbi2.ssa.ir deleted file mode 100644 index b033c76d..00000000 --- a/tests/approvals/out/abi-decorators/SubAbi2.ssa.ir +++ /dev/null @@ -1,62 +0,0 @@ -contract tests/approvals/abi-decorators.algo.ts::SubAbi2: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.__puya_arc4_router__() -> bool: - block@0: // L50 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L50 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "someMethod()string" => block@2, * => block@3} - block@2: // someMethod_route_L52 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bytes = tests/approvals/abi-decorators.algo.ts::SubAbi2.someMethod() - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%7#0) - return 1u - block@3: // switch_case_default_L50 - goto block@4 - block@4: // switch_case_next_L50 - goto block@9 - block@5: // bare_routing_L50 - let tmp%8#0: uint64 = (txn OnCompletion) - switch tmp%8#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L50 - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/abi-decorators.algo.ts::SubAbi2.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L50 - goto block@8 - block@8: // switch_case_next_L50 - goto block@9 - block@9: // after_if_else_L50 - return 0u - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.someMethod() -> bytes: - block@0: // L52 - return "sub-abi-2:noop" - - subroutine tests/approvals/abi-decorators.algo.ts::SubAbi2.__algots__.defaultCreate() -> void: - block@0: // L50 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/accounts/AccountsContract.approval.teal b/tests/approvals/out/accounts/AccountsContract.approval.teal index 406e3be5..569da21e 100644 --- a/tests/approvals/out/accounts/AccountsContract.approval.teal +++ b/tests/approvals/out/accounts/AccountsContract.approval.teal @@ -1,28 +1,40 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/accounts.algo.ts::AccountsContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 93 bytecblock 0x00 0x068101 - callsub __puya_arc4_router__ - return - -// tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/accounts.algo.ts:4 // export class AccountsContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/accounts.algo.ts:4 + // export class AccountsContract extends Contract { txna ApplicationArgs 0 pushbytes 0xdfe9a035 // method "getAccountInfo(account,asset)(byte[],uint64,uint64,byte[],uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,bool,bool)" swap - match __puya_arc4_router___getAccountInfo_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_getAccountInfo_route@3 + +main_switch_case_default@4: + +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/accounts.algo.ts:4 + // export class AccountsContract extends Contract { + intc_0 // 0 -__puya_arc4_router___getAccountInfo_route@2: +main_after_inlined_tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__@11: + return + +main_getAccountInfo_route@3: // tests/approvals/accounts.algo.ts:5 // public getAccountInfo(account: Account, asset: Asset) { txn OnCompletion @@ -160,21 +172,22 @@ __puya_arc4_router___getAccountInfo_route@2: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__@11 -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 - -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/accounts.algo.ts:4 // export class AccountsContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 + +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 -__puya_arc4_router_____algots__.defaultCreate@6: +main___algots__.defaultCreate@7: // tests/approvals/accounts.algo.ts:4 // export class AccountsContract extends Contract { txn ApplicationID @@ -183,15 +196,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/accounts.algo.ts:4 - // export class AccountsContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__@11 // tests/approvals/accounts.algo.ts::AccountsContract.getAccountInfo(account: bytes, asset: uint64) -> bytes, uint64, uint64, bytes, uint64, uint64, uint64, uint64, uint64, uint64, uint64, uint64, uint64, uint64, uint64: @@ -1340,6 +1345,8 @@ ensure_budget_while_top@1: frame_dig 0 < bz ensure_budget_after_while@7 + +ensure_budget_while_body@2: itxn_begin pushint 6 // appl itxn_field TypeEnum @@ -1353,23 +1360,22 @@ ensure_budget_while_top@1: intc_1 // 1 frame_dig -1 match ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4 - b ensure_budget_switch_case_default@5 -ensure_budget_switch_case_0@3: - intc_0 // 0 - itxn_field Fee - b ensure_budget_switch_case_next@6 +ensure_budget_switch_case_default@5: + +ensure_budget_switch_case_next@6: + itxn_submit + b ensure_budget_while_top@1 ensure_budget_switch_case_1@4: global MinTxnFee itxn_field Fee b ensure_budget_switch_case_next@6 -ensure_budget_switch_case_default@5: - -ensure_budget_switch_case_next@6: - itxn_submit - b ensure_budget_while_top@1 +ensure_budget_switch_case_0@3: + intc_0 // 0 + itxn_field Fee + b ensure_budget_switch_case_next@6 ensure_budget_after_while@7: retsub diff --git a/tests/approvals/out/accounts/AccountsContract.arc32.json b/tests/approvals/out/accounts/AccountsContract.arc32.json index 2e08ea2e..7b0d3acc 100644 --- a/tests/approvals/out/accounts/AccountsContract.arc32.json +++ b/tests/approvals/out/accounts/AccountsContract.arc32.json @@ -74,8 +74,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDkzCiAgICBieXRlY2Jsb2NrIDB4MDAgMHgwNjgxMDEKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZGZlOWEwMzUgLy8gbWV0aG9kICJnZXRBY2NvdW50SW5mbyhhY2NvdW50LGFzc2V0KShieXRlW10sdWludDY0LHVpbnQ2NCxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCxib29sKSIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEFjY291bnRJbmZvX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRBY2NvdW50SW5mb19yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NQogICAgLy8gcHVibGljIGdldEFjY291bnRJbmZvKGFjY291bnQ6IEFjY291bnQsIGFzc2V0OiBBc3NldCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICBjYWxsc3ViIGdldEFjY291bnRJbmZvCiAgICBjb3ZlciAxNAogICAgY292ZXIgMTMKICAgIGNvdmVyIDEyCiAgICBjb3ZlciAxMQogICAgY292ZXIgMTAKICAgIGNvdmVyIDkKICAgIGNvdmVyIDgKICAgIGNvdmVyIDcKICAgIGNvdmVyIDYKICAgIGNvdmVyIDUKICAgIGNvdmVyIDQKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMTQKICAgIGl0b2IKICAgIGNvdmVyIDkKICAgIGl0b2IKICAgIGNvdmVyIDEwCiAgICBpdG9iCiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTEKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA5CiAgICBzZXRiaXQKICAgIGNvdmVyIDExCiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDE1CiAgICBzZXRiaXQKICAgIGNvdmVyIDkKICAgIGludGNfMiAvLyA5MwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gOTMKICAgICsKICAgIHN3YXAKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgcHVzaGludCA3MzcgLy8gNzM3CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0LmdldEFjY291bnRJbmZvKGFjY291bnQ6IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiBieXRlcywgdWludDY0LCB1aW50NjQsIGJ5dGVzLCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0QWNjb3VudEluZm86CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICBwcm90byAyIDE1CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo2CiAgICAvLyBlbnN1cmVCdWRnZXQoMTQwMCkKICAgIHB1c2hpbnQgMTQwMCAvLyAxNDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjAKICAgIC8vIHRvdGFsQm94Qnl0ZXM6IGFjY291bnQudG90YWxCb3hCeXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjAKICAgIC8vIHRvdGFsQm94Qnl0ZXM6IGFjY291bnQudG90YWxCb3hCeXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjEKICAgIC8vIGlzT3B0SW5BcHA6IGFjY291bnQuaXNPcHRlZEluKEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCksCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYXBwX29wdGVkX2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIyCiAgICAvLyBpc09wdEluQXNzZXQ6IGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6Ny0yMwogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYnl0ZXM6IGFjY291bnQuYnl0ZXMsCiAgICAvLyAgIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIC8vICAgbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgLy8gICBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIC8vICAgdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIC8vICAgdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICAvLyAgIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICAvLyAgIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIC8vICAgdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgLy8gICB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgLy8gICB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIC8vICAgdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgLy8gICB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICAvLyAgIGlzT3B0SW5BcHA6IGFjY291bnQuaXNPcHRlZEluKEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCksCiAgICAvLyAgIGlzT3B0SW5Bc3NldDogYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLAogICAgLy8gfQogICAgZnJhbWVfZGlnIC0yCiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA3CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWNfMSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjXzEgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfZGlnIC0xCiAgICBtYXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDc6CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDkzCiAgICBieXRlY2Jsb2NrIDB4MDAgMHgwNjgxMDEKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhkZmU5YTAzNSAvLyBtZXRob2QgImdldEFjY291bnRJbmZvKGFjY291bnQsYXNzZXQpKGJ5dGVbXSx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLGJvb2wpIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9nZXRBY2NvdW50SW5mb19yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX2dldEFjY291bnRJbmZvX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjUKICAgIC8vIHB1YmxpYyBnZXRBY2NvdW50SW5mbyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIGNhbGxzdWIgZ2V0QWNjb3VudEluZm8KICAgIGNvdmVyIDE0CiAgICBjb3ZlciAxMwogICAgY292ZXIgMTIKICAgIGNvdmVyIDExCiAgICBjb3ZlciAxMAogICAgY292ZXIgOQogICAgY292ZXIgOAogICAgY292ZXIgNwogICAgY292ZXIgNgogICAgY292ZXIgNQogICAgY292ZXIgNAogICAgY292ZXIgMwogICAgY292ZXIgMgogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDExCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAxNAogICAgaXRvYgogICAgY292ZXIgOQogICAgaXRvYgogICAgY292ZXIgMTAKICAgIGl0b2IKICAgIGNvdmVyIDExCiAgICBpdG9iCiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDkKICAgIHNldGJpdAogICAgY292ZXIgMTEKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMTUKICAgIHNldGJpdAogICAgY292ZXIgOQogICAgaW50Y18yIC8vIDkzCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA5MwogICAgKwogICAgc3dhcAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBwdXNoaW50IDczNyAvLyA3MzcKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5nZXRBY2NvdW50SW5mbyhhY2NvdW50OiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIHVpbnQ2NCwgdWludDY0LCBieXRlcywgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQ6CmdldEFjY291bnRJbmZvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NQogICAgLy8gcHVibGljIGdldEFjY291bnRJbmZvKGFjY291bnQ6IEFjY291bnQsIGFzc2V0OiBBc3NldCkgewogICAgcHJvdG8gMiAxNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NgogICAgLy8gZW5zdXJlQnVkZ2V0KDE0MDApCiAgICBwdXNoaW50IDE0MDAgLy8gMTQwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OQogICAgLy8gYmFsYW5jZTogYWNjb3VudC5iYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIxCiAgICAvLyBpc09wdEluQXBwOiBhY2NvdW50LmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGFwcF9vcHRlZF9pbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OQogICAgLy8gYmFsYW5jZTogYWNjb3VudC5iYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMgogICAgLy8gaXNPcHRJbkFzc2V0OiBhY2NvdW50LmlzT3B0ZWRJbihhc3NldCksCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjctMjMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGJ5dGVzOiBhY2NvdW50LmJ5dGVzLAogICAgLy8gICBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICAvLyAgIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIC8vICAgYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICAvLyAgIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICAvLyAgIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgLy8gICB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgLy8gICB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICAvLyAgIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIC8vICAgdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIC8vICAgdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICAvLyAgIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIC8vICAgdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgLy8gICBpc09wdEluQXBwOiBhY2NvdW50LmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLAogICAgLy8gICBpc09wdEluQXNzZXQ6IGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwKICAgIC8vIH0KICAgIGZyYW1lX2RpZyAtMgogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANwoKZW5zdXJlX2J1ZGdldF93aGlsZV9ib2R5QDI6CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWNfMSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjXzEgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfZGlnIC0xCiAgICBtYXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANjoKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA2CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDc6CiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/accounts/AccountsContract.arc56.json b/tests/approvals/out/accounts/AccountsContract.arc56.json index b9d2bc2a..ea8e2bf1 100644 --- a/tests/approvals/out/accounts/AccountsContract.arc56.json +++ b/tests/approvals/out/accounts/AccountsContract.arc56.json @@ -130,204 +130,204 @@ "sourceInfo": [ { "pc": [ - 49 + 41 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 290, - 297, - 304, - 311, - 318, - 325, - 332, - 339, - 346, - 353, - 360, - 367, - 372, - 379, - 386, - 393, - 400, - 407, - 414, - 421, - 428, - 435, - 442, - 449, - 456, - 461, - 468, - 475, - 482, - 489, - 496, - 503, - 510, - 517, - 524, - 531, - 538, - 545, - 550, - 557, - 564, - 571, - 578, - 585, - 592, - 599, - 606, - 613, - 620, - 627, - 634, - 639, - 646, - 653, - 660, - 667, - 674, - 681, - 688, - 695, - 702, - 709, - 716, - 723, - 728, - 735, - 742, - 749, - 756, - 763, - 770, - 777, - 784, - 791, - 798, - 805, - 812, - 817, - 824, - 831, - 838, - 845, - 852, - 859, - 866, - 873, - 880, - 887, - 894, - 901, - 906, - 913, - 920, - 927, - 934, - 941, - 948, - 955, - 962, - 969, - 976, - 983, - 990, - 995, - 1002, - 1009, - 1016, - 1023, - 1030, - 1037, - 1044, - 1051, - 1058, - 1065, - 1072, - 1079, - 1084, - 1091, - 1098, - 1105, - 1112, - 1119, - 1126, - 1133, - 1140, - 1147, - 1154, - 1161, - 1168, - 1173, - 1180, - 1187, - 1194, - 1201, - 1208, - 1215, - 1222, - 1229, - 1236, - 1243, - 1250, - 1257, - 1262, - 1269, - 1276, - 1283, - 1290, - 1297, - 1304, - 1311, - 1318, - 1325, - 1332, - 1339, - 1346, - 1351, - 1358, - 1365, - 1372, - 1379, - 1386, - 1393, - 1400, - 1407, - 1414, - 1421, - 1428, - 1435, - 1448, - 1455, - 1462, - 1469, - 1476, - 1483, - 1490, - 1497, - 1504, - 1511, - 1518, - 1525 + 281, + 288, + 295, + 302, + 309, + 316, + 323, + 330, + 337, + 344, + 351, + 358, + 363, + 370, + 377, + 384, + 391, + 398, + 405, + 412, + 419, + 426, + 433, + 440, + 447, + 452, + 459, + 466, + 473, + 480, + 487, + 494, + 501, + 508, + 515, + 522, + 529, + 536, + 541, + 548, + 555, + 562, + 569, + 576, + 583, + 590, + 597, + 604, + 611, + 618, + 625, + 630, + 637, + 644, + 651, + 658, + 665, + 672, + 679, + 686, + 693, + 700, + 707, + 714, + 719, + 726, + 733, + 740, + 747, + 754, + 761, + 768, + 775, + 782, + 789, + 796, + 803, + 808, + 815, + 822, + 829, + 836, + 843, + 850, + 857, + 864, + 871, + 878, + 885, + 892, + 897, + 904, + 911, + 918, + 925, + 932, + 939, + 946, + 953, + 960, + 967, + 974, + 981, + 986, + 993, + 1000, + 1007, + 1014, + 1021, + 1028, + 1035, + 1042, + 1049, + 1056, + 1063, + 1070, + 1075, + 1082, + 1089, + 1096, + 1103, + 1110, + 1117, + 1124, + 1131, + 1138, + 1145, + 1152, + 1159, + 1164, + 1171, + 1178, + 1185, + 1192, + 1199, + 1206, + 1213, + 1220, + 1227, + 1234, + 1241, + 1248, + 1253, + 1260, + 1267, + 1274, + 1281, + 1288, + 1295, + 1302, + 1309, + 1316, + 1323, + 1330, + 1337, + 1342, + 1349, + 1356, + 1363, + 1370, + 1377, + 1384, + 1391, + 1398, + 1405, + 1412, + 1419, + 1426, + 1439, + 1446, + 1453, + 1460, + 1467, + 1474, + 1481, + 1488, + 1495, + 1502, + 1509, + 1516 ], "errorMessage": "account funded" }, { "pc": [ - 266 + 257 ], "errorMessage": "can only call when creating" }, { "pc": [ - 54 + 46 ], "errorMessage": "can only call when not creating" } @@ -340,8 +340,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDkzCiAgICBieXRlY2Jsb2NrIDB4MDAgMHgwNjgxMDEKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZGZlOWEwMzUgLy8gbWV0aG9kICJnZXRBY2NvdW50SW5mbyhhY2NvdW50LGFzc2V0KShieXRlW10sdWludDY0LHVpbnQ2NCxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCxib29sKSIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEFjY291bnRJbmZvX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRBY2NvdW50SW5mb19yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NQogICAgLy8gcHVibGljIGdldEFjY291bnRJbmZvKGFjY291bnQ6IEFjY291bnQsIGFzc2V0OiBBc3NldCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICBjYWxsc3ViIGdldEFjY291bnRJbmZvCiAgICBjb3ZlciAxNAogICAgY292ZXIgMTMKICAgIGNvdmVyIDEyCiAgICBjb3ZlciAxMQogICAgY292ZXIgMTAKICAgIGNvdmVyIDkKICAgIGNvdmVyIDgKICAgIGNvdmVyIDcKICAgIGNvdmVyIDYKICAgIGNvdmVyIDUKICAgIGNvdmVyIDQKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMTQKICAgIGl0b2IKICAgIGNvdmVyIDkKICAgIGl0b2IKICAgIGNvdmVyIDEwCiAgICBpdG9iCiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTEKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA5CiAgICBzZXRiaXQKICAgIGNvdmVyIDExCiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDE1CiAgICBzZXRiaXQKICAgIGNvdmVyIDkKICAgIGludGNfMiAvLyA5MwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gOTMKICAgICsKICAgIHN3YXAKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgcHVzaGludCA3MzcgLy8gNzM3CiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0LmdldEFjY291bnRJbmZvKGFjY291bnQ6IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiBieXRlcywgdWludDY0LCB1aW50NjQsIGJ5dGVzLCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZ2V0QWNjb3VudEluZm86CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICBwcm90byAyIDE1CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo2CiAgICAvLyBlbnN1cmVCdWRnZXQoMTQwMCkKICAgIHB1c2hpbnQgMTQwMCAvLyAxNDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjAKICAgIC8vIHRvdGFsQm94Qnl0ZXM6IGFjY291bnQudG90YWxCb3hCeXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjkKICAgIC8vIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTAKICAgIC8vIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTEKICAgIC8vIGF1dGhBZGRyZXNzOiBhY2NvdW50LmF1dGhBZGRyZXNzLmJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTIKICAgIC8vIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTMKICAgIC8vIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtQnl0ZVNsaWNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTQKICAgIC8vIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTUKICAgIC8vIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTYKICAgIC8vIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTcKICAgIC8vIHRvdGFsQXNzZXRzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFzc2V0c0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHNDcmVhdGVkCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTgKICAgIC8vIHRvdGFsQXNzZXRzOiBhY2NvdW50LnRvdGFsQXNzZXRzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MTkKICAgIC8vIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjAKICAgIC8vIHRvdGFsQm94Qnl0ZXM6IGFjY291bnQudG90YWxCb3hCeXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6MjEKICAgIC8vIGlzT3B0SW5BcHA6IGFjY291bnQuaXNPcHRlZEluKEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCksCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYXBwX29wdGVkX2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIyCiAgICAvLyBpc09wdEluQXNzZXQ6IGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6Ny0yMwogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYnl0ZXM6IGFjY291bnQuYnl0ZXMsCiAgICAvLyAgIGJhbGFuY2U6IGFjY291bnQuYmFsYW5jZSwKICAgIC8vICAgbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgLy8gICBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIC8vICAgdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIC8vICAgdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICAvLyAgIHRvdGFsRXh0cmFBcHBQYWdlczogYWNjb3VudC50b3RhbEV4dHJhQXBwUGFnZXMsCiAgICAvLyAgIHRvdGFsQXBwc0NyZWF0ZWQ6IGFjY291bnQudG90YWxBcHBzQ3JlYXRlZCwKICAgIC8vICAgdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgLy8gICB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgLy8gICB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIC8vICAgdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgLy8gICB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICAvLyAgIGlzT3B0SW5BcHA6IGFjY291bnQuaXNPcHRlZEluKEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCksCiAgICAvLyAgIGlzT3B0SW5Bc3NldDogYWNjb3VudC5pc09wdGVkSW4oYXNzZXQpLAogICAgLy8gfQogICAgZnJhbWVfZGlnIC0yCiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICB1bmNvdmVyIDE0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA3CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWNfMSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjXzEgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfZGlnIC0xCiAgICBtYXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDc6CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDkzCiAgICBieXRlY2Jsb2NrIDB4MDAgMHgwNjgxMDEKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhkZmU5YTAzNSAvLyBtZXRob2QgImdldEFjY291bnRJbmZvKGFjY291bnQsYXNzZXQpKGJ5dGVbXSx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLGJvb2wpIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9nZXRBY2NvdW50SW5mb19yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjpBY2NvdW50c0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX2dldEFjY291bnRJbmZvX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo1CiAgICAvLyBwdWJsaWMgZ2V0QWNjb3VudEluZm8oYWNjb3VudDogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjUKICAgIC8vIHB1YmxpYyBnZXRBY2NvdW50SW5mbyhhY2NvdW50OiBBY2NvdW50LCBhc3NldDogQXNzZXQpIHsKICAgIGNhbGxzdWIgZ2V0QWNjb3VudEluZm8KICAgIGNvdmVyIDE0CiAgICBjb3ZlciAxMwogICAgY292ZXIgMTIKICAgIGNvdmVyIDExCiAgICBjb3ZlciAxMAogICAgY292ZXIgOQogICAgY292ZXIgOAogICAgY292ZXIgNwogICAgY292ZXIgNgogICAgY292ZXIgNQogICAgY292ZXIgNAogICAgY292ZXIgMwogICAgY292ZXIgMgogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDExCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAxNAogICAgaXRvYgogICAgY292ZXIgOQogICAgaXRvYgogICAgY292ZXIgMTAKICAgIGl0b2IKICAgIGNvdmVyIDExCiAgICBpdG9iCiAgICBjb3ZlciAxMQogICAgaXRvYgogICAgY292ZXIgMTIKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBpdG9iCiAgICBjb3ZlciAxMgogICAgaXRvYgogICAgY292ZXIgMTIKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvdmVyIDEyCiAgICBieXRlY18wIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDkKICAgIHNldGJpdAogICAgY292ZXIgMTEKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMTUKICAgIHNldGJpdAogICAgY292ZXIgOQogICAgaW50Y18yIC8vIDkzCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA5MwogICAgKwogICAgc3dhcAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBwdXNoaW50IDczNyAvLyA3MzcKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQWNjb3VudHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo6QWNjb3VudHNDb250cmFjdC5nZXRBY2NvdW50SW5mbyhhY2NvdW50OiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIHVpbnQ2NCwgdWludDY0LCBieXRlcywgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQ6CmdldEFjY291bnRJbmZvOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NQogICAgLy8gcHVibGljIGdldEFjY291bnRJbmZvKGFjY291bnQ6IEFjY291bnQsIGFzc2V0OiBBc3NldCkgewogICAgcHJvdG8gMiAxNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NgogICAgLy8gZW5zdXJlQnVkZ2V0KDE0MDApCiAgICBwdXNoaW50IDE0MDAgLy8gMTQwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OQogICAgLy8gYmFsYW5jZTogYWNjb3VudC5iYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czo5CiAgICAvLyBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEwCiAgICAvLyBtaW5CYWxhbmNlOiBhY2NvdW50Lm1pbkJhbGFuY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjExCiAgICAvLyBhdXRoQWRkcmVzczogYWNjb3VudC5hdXRoQWRkcmVzcy5ieXRlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEyCiAgICAvLyB0b3RhbE51bVVpbnQ6IGFjY291bnQudG90YWxOdW1VaW50LAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbE51bUJ5dGVTbGljZTogYWNjb3VudC50b3RhbE51bUJ5dGVTbGljZSwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bUJ5dGVTbGljZQogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE0CiAgICAvLyB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE1CiAgICAvLyB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE2CiAgICAvLyB0b3RhbEFwcHNPcHRlZEluOiBhY2NvdW50LnRvdGFsQXBwc09wdGVkSW4sCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE3CiAgICAvLyB0b3RhbEFzc2V0c0NyZWF0ZWQ6IGFjY291bnQudG90YWxBc3NldHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE4CiAgICAvLyB0b3RhbEFzc2V0czogYWNjb3VudC50b3RhbEFzc2V0cywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjE5CiAgICAvLyB0b3RhbEJveGVzOiBhY2NvdW50LnRvdGFsQm94ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIwCiAgICAvLyB0b3RhbEJveEJ5dGVzOiBhY2NvdW50LnRvdGFsQm94Qnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjIxCiAgICAvLyBpc09wdEluQXBwOiBhY2NvdW50LmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGFwcF9vcHRlZF9pbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OQogICAgLy8gYmFsYW5jZTogYWNjb3VudC5iYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMAogICAgLy8gbWluQmFsYW5jZTogYWNjb3VudC5taW5CYWxhbmNlLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMQogICAgLy8gYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMgogICAgLy8gdG90YWxOdW1VaW50OiBhY2NvdW50LnRvdGFsTnVtVWludCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxMwogICAgLy8gdG90YWxOdW1CeXRlU2xpY2U6IGFjY291bnQudG90YWxOdW1CeXRlU2xpY2UsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNAogICAgLy8gdG90YWxFeHRyYUFwcFBhZ2VzOiBhY2NvdW50LnRvdGFsRXh0cmFBcHBQYWdlcywKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNQogICAgLy8gdG90YWxBcHBzQ3JlYXRlZDogYWNjb3VudC50b3RhbEFwcHNDcmVhdGVkLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNgogICAgLy8gdG90YWxBcHBzT3B0ZWRJbjogYWNjb3VudC50b3RhbEFwcHNPcHRlZEluLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXBwc09wdGVkSW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxNwogICAgLy8gdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIGZyYW1lX2RpZyAtMgogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOAogICAgLy8gdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICBmcmFtZV9kaWcgLTIKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoxOQogICAgLy8gdG90YWxCb3hlczogYWNjb3VudC50b3RhbEJveGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMAogICAgLy8gdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgZnJhbWVfZGlnIC0yCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94Qnl0ZXMKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYWNjb3VudHMuYWxnby50czoyMgogICAgLy8gaXNPcHRJbkFzc2V0OiBhY2NvdW50LmlzT3B0ZWRJbihhc3NldCksCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hY2NvdW50cy5hbGdvLnRzOjctMjMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGJ5dGVzOiBhY2NvdW50LmJ5dGVzLAogICAgLy8gICBiYWxhbmNlOiBhY2NvdW50LmJhbGFuY2UsCiAgICAvLyAgIG1pbkJhbGFuY2U6IGFjY291bnQubWluQmFsYW5jZSwKICAgIC8vICAgYXV0aEFkZHJlc3M6IGFjY291bnQuYXV0aEFkZHJlc3MuYnl0ZXMsCiAgICAvLyAgIHRvdGFsTnVtVWludDogYWNjb3VudC50b3RhbE51bVVpbnQsCiAgICAvLyAgIHRvdGFsTnVtQnl0ZVNsaWNlOiBhY2NvdW50LnRvdGFsTnVtQnl0ZVNsaWNlLAogICAgLy8gICB0b3RhbEV4dHJhQXBwUGFnZXM6IGFjY291bnQudG90YWxFeHRyYUFwcFBhZ2VzLAogICAgLy8gICB0b3RhbEFwcHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXBwc0NyZWF0ZWQsCiAgICAvLyAgIHRvdGFsQXBwc09wdGVkSW46IGFjY291bnQudG90YWxBcHBzT3B0ZWRJbiwKICAgIC8vICAgdG90YWxBc3NldHNDcmVhdGVkOiBhY2NvdW50LnRvdGFsQXNzZXRzQ3JlYXRlZCwKICAgIC8vICAgdG90YWxBc3NldHM6IGFjY291bnQudG90YWxBc3NldHMsCiAgICAvLyAgIHRvdGFsQm94ZXM6IGFjY291bnQudG90YWxCb3hlcywKICAgIC8vICAgdG90YWxCb3hCeXRlczogYWNjb3VudC50b3RhbEJveEJ5dGVzLAogICAgLy8gICBpc09wdEluQXBwOiBhY2NvdW50LmlzT3B0ZWRJbihHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQpLAogICAgLy8gICBpc09wdEluQXNzZXQ6IGFjY291bnQuaXNPcHRlZEluKGFzc2V0KSwKICAgIC8vIH0KICAgIGZyYW1lX2RpZyAtMgogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgdW5jb3ZlciAxNAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6OkFjY291bnRzQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FjY291bnRzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFjY291bnRzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANwoKZW5zdXJlX2J1ZGdldF93aGlsZV9ib2R5QDI6CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWNfMSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIGJ5dGVjXzEgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfZGlnIC0xCiAgICBtYXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANjoKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDYKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA2CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDc6CiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiADAAFdJgIBAAMGgQExGyITQQDdNhoAgATf6aA1TI4BAAIiQzEZIhJEMRgiE0Q2GgEXwBw2GgIXwDCIAMtODk4NTgxOC04KTglOCE4HTgZOBU4ETgNOAkxJFRZXBgJMUE4LFk4MFk4MSRUWVwYCTFBODhZOCRZOChZOCxZOCxZODBZODBZODBZODEwWTgwoIk8JVE4LKCJPD1ROCSQWVwYCgABMUEsBFSQITE8EUE8FUEwWVwYCUE8CUE8CUE8CUE8CUE8CUE8CUE8DUE8DUE8EUE8DUE8CIlNMgeEFTwJUTFBMUIAEFR98dUxQsCNC/zIxGSJMjgEAA0L/JjEYIhJEiAUPI0L/G4oCD4H4CiKIBQWL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRQFEi/5zCkUBRIv+cwtFAUSL/nMARIv+cwFFAUSL/nMCRQFEi/5zA0UBRIv+cwRFAUSL/nMFRQFEi/5zBkUBRIv+cwdFAUSL/nMIRQFEi/5zCUUBRIv+cwpFAUSL/nMLRQFEi/5zAEUBRIv+cwFEi/5zAkUBRIv+cwNFAUSL/nMERQFEi/5zBUUBRIv+cwZFAUSL/nMHRQFEi/5zCEUBRIv+cwlFAUSL/nMKRQFEi/5zC0UBRIv+cwBFAUSL/nMBRQFEi/5zAkSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRQFEi/5zCkUBRIv+cwtFAUSL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRIv+cwRFAUSL/nMFRQFEi/5zBkUBRIv+cwdFAUSL/nMIRQFEi/5zCUUBRIv+cwpFAUSL/nMLRQFEi/5zAEUBRIv+cwFFAUSL/nMCRQFEi/5zA0UBRIv+cwREi/5zBUUBRIv+cwZFAUSL/nMHRQFEi/5zCEUBRIv+cwlFAUSL/nMKRQFEi/5zC0UBRIv+cwBFAUSL/nMBRQFEi/5zAkUBRIv+cwNFAUSL/nMERQFEi/5zBUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRQFEi/5zCkUBRIv+cwtFAUSL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRIv+cwdFAUSL/nMIRQFEi/5zCUUBRIv+cwpFAUSL/nMLRQFEi/5zAEUBRIv+cwFFAUSL/nMCRQFEi/5zA0UBRIv+cwRFAUSL/nMFRQFEi/5zBkUBRIv+cwdEi/5zCEUBRIv+cwlFAUSL/nMKRQFEi/5zC0UBRIv+cwBFAUSL/nMBRQFEi/5zAkUBRIv+cwNFAUSL/nMERQFEi/5zBUUBRIv+cwZFAUSL/nMHRQFEi/5zCESL/nMJRQFEi/5zCkUBRIv+cwtFAUSL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRIv+cwpFAUSL/nMLRQFEi/5zAEUBRIv+cwFFAUSL/nMCRQFEi/5zA0UBRIv+cwRFAUSL/nMFRQFEi/5zBkUBRIv+cwdFAUSL/nMIRQFEi/5zCUUBRIv+cwpEi/5zC0UBRIv+cwBFAUSL/nMBRQFEi/5zAkUBRIv+cwNFAUSL/nMERQFEi/5zBUUBRIv+cwZFAUSL/nMHRQFEi/5zCEUBRIv+cwlFAUSL/nMKRQFEi/5zC0SL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRQFEi/5zCkUBRIv+cwtFAUQyCIv+TGGL/nMARQFEi/5zAUUBRIv+cwJFAUSL/nMDRQFEi/5zBEUBRIv+cwVFAUSL/nMGRQFEi/5zB0UBRIv+cwhFAUSL/nMJRQFEi/5zCkUBRIv+cwtFAUSL/ov/cABFAYv+Tw5PDk8OTw5PDk8OTw5PDk8OTw5PDk8OTw5PDomKAACJigIAi/6BCggyDIsADEEAKrGBBrIQgQWyGSmyHimyHyIji/+OAgALAASzQv/bMgCyAUL/9SKyAUL/74k=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/accounts/AccountsContract.clear.teal b/tests/approvals/out/accounts/AccountsContract.clear.teal index c5fc9c10..a4d58047 100644 --- a/tests/approvals/out/accounts/AccountsContract.clear.teal +++ b/tests/approvals/out/accounts/AccountsContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/accounts.algo.ts::AccountsContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.approval.0.ssa.ir b/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.approval.0.ssa.ir new file mode 100644 index 00000000..04bd14c5 --- /dev/null +++ b/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.approval.0.ssa.ir @@ -0,0 +1,542 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "getAccountInfo(account,asset)(byte[],uint64,uint64,byte[],uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,bool,bool)" => block@2, * => block@3} + block@2: // getAccountInfo_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + let tmp%9#0: bytes = ((txnas Accounts) tmp%8#0) + let tmp%10#0: bytes = (txna ApplicationArgs 2) + let tmp%11#0: uint64 = (btoi tmp%10#0) + let tmp%12#0: uint64 = ((txnas Assets) tmp%11#0) + let (elements_to_encode%0#0: bytes, elements_to_encode%1#0: uint64, elements_to_encode%2#0: uint64, elements_to_encode%3#0: bytes, elements_to_encode%4#0: uint64, elements_to_encode%5#0: uint64, elements_to_encode%6#0: uint64, elements_to_encode%7#0: uint64, elements_to_encode%8#0: uint64, elements_to_encode%9#0: uint64, elements_to_encode%10#0: uint64, elements_to_encode%11#0: uint64, elements_to_encode%12#0: uint64, elements_to_encode%13#0: bool, elements_to_encode%14#0: bool) = tests/approvals/accounts.algo.ts::AccountsContract.getAccountInfo(tmp%9#0, tmp%12#0) + let length%0#0: uint64 = (len elements_to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%0#0) + let val_as_bytes%0#0: bytes = (itob elements_to_encode%1#0) + let val_as_bytes%1#0: bytes = (itob elements_to_encode%2#0) + let length%1#0: uint64 = (len elements_to_encode%3#0) + let as_bytes%1#0: bytes = (itob length%1#0) + let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 elements_to_encode%3#0) + let val_as_bytes%2#0: bytes = (itob elements_to_encode%4#0) + let val_as_bytes%3#0: bytes = (itob elements_to_encode%5#0) + let val_as_bytes%4#0: bytes = (itob elements_to_encode%6#0) + let val_as_bytes%5#0: bytes = (itob elements_to_encode%7#0) + let val_as_bytes%6#0: bytes = (itob elements_to_encode%8#0) + let val_as_bytes%7#0: bytes = (itob elements_to_encode%9#0) + let val_as_bytes%8#0: bytes = (itob elements_to_encode%10#0) + let val_as_bytes%9#0: bytes = (itob elements_to_encode%11#0) + let val_as_bytes%10#0: bytes = (itob elements_to_encode%12#0) + let encoded_bool%0#0: bytes = (setbit 0x00 0u elements_to_encode%13#0) + let encoded_bool%1#0: bytes = (setbit 0x00 0u elements_to_encode%14#0) + let current_tail_offset%0#0: uint64 = 93u + let encoded_tuple_buffer%0#0: bytes = 0x + let as_bytes%2#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%0#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) + let as_bytes%3#0: bytes = (itob current_tail_offset%1#0) + let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%3#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 offset_as_uint16%1#0) + let data_length%1#0: uint64 = (len encoded_value%1#0) + let current_tail_offset%2#0: uint64 = (+ current_tail_offset%1#0 data_length%1#0) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%2#0) + let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 val_as_bytes%3#0) + let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) + let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%5#0) + let encoded_tuple_buffer%9#0: bytes = (concat encoded_tuple_buffer%8#0 val_as_bytes%6#0) + let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%7#0) + let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%8#0) + let encoded_tuple_buffer%12#0: bytes = (concat encoded_tuple_buffer%11#0 val_as_bytes%9#0) + let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 val_as_bytes%10#0) + let encoded_tuple_buffer%14#0: bytes = (concat encoded_tuple_buffer%13#0 encoded_bool%0#0) + let is_true%0#0: uint64 = (getbit encoded_bool%1#0 0u) + let encoded_tuple_buffer%15#0: bytes = (setbit encoded_tuple_buffer%14#0 737u is_true%0#0) + let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 encoded_value%0#0) + let encoded_tuple_buffer%17#0: bytes = (concat encoded_tuple_buffer%16#0 encoded_value%1#0) + let tmp%13#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%17#0) + (log tmp%13#0) + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%14#0: uint64 = (txn OnCompletion) + switch tmp%14#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L4 + let tmp%15#0: uint64 = (txn ApplicationID) + let tmp%16#0: bool = (== tmp%15#0 0u) + (assert tmp%16#0) // can only call when creating + tests/approvals/accounts.algo.ts::AccountsContract.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + +subroutine tests/approvals/accounts.algo.ts::AccountsContract.getAccountInfo(account: bytes, asset: uint64) -> : + block@0: // L5 + _puya_lib.util.ensure_budget(1400u, 0u) + let (value%0#0: uint64, check%0#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%0#0) // account funded + let (value%1#0: uint64, check%1#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%1#0) // account funded + let (value%2#0: bytes, check%2#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%2#0) // account funded + let (value%3#0: uint64, check%3#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%3#0) // account funded + let (value%4#0: uint64, check%4#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%4#0) // account funded + let (value%5#0: uint64, check%5#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%5#0) // account funded + let (value%6#0: uint64, check%6#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%6#0) // account funded + let (value%7#0: uint64, check%7#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%7#0) // account funded + let (value%8#0: uint64, check%8#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%8#0) // account funded + let (value%9#0: uint64, check%9#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%9#0) // account funded + let (value%10#0: uint64, check%10#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%10#0) // account funded + let (value%11#0: uint64, check%11#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%11#0) // account funded + let tmp%0#0: uint64 = (global CurrentApplicationID) + let tmp%1#0: bool = (app_opted_in account#0 tmp%0#0) + let (tmp%2#0: uint64, tmp%3#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%12#0: uint64, check%12#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%12#0) // account funded + let (value%13#0: uint64, check%13#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%13#0) // account funded + let (value%14#0: bytes, check%14#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%14#0) // account funded + let (value%15#0: uint64, check%15#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%15#0) // account funded + let (value%16#0: uint64, check%16#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%16#0) // account funded + let (value%17#0: uint64, check%17#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%17#0) // account funded + let (value%18#0: uint64, check%18#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%18#0) // account funded + let (value%19#0: uint64, check%19#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%19#0) // account funded + let (value%20#0: uint64, check%20#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%20#0) // account funded + let (value%21#0: uint64, check%21#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%21#0) // account funded + let (value%22#0: uint64, check%22#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%22#0) // account funded + let (value%23#0: uint64, check%23#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%23#0) // account funded + let tmp%4#0: uint64 = (global CurrentApplicationID) + let tmp%5#0: bool = (app_opted_in account#0 tmp%4#0) + let (tmp%6#0: uint64, tmp%7#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%24#0: uint64, check%24#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%24#0) // account funded + let (value%25#0: uint64, check%25#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%25#0) // account funded + let (value%26#0: bytes, check%26#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%26#0) // account funded + let (value%27#0: uint64, check%27#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%27#0) // account funded + let (value%28#0: uint64, check%28#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%28#0) // account funded + let (value%29#0: uint64, check%29#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%29#0) // account funded + let (value%30#0: uint64, check%30#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%30#0) // account funded + let (value%31#0: uint64, check%31#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%31#0) // account funded + let (value%32#0: uint64, check%32#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%32#0) // account funded + let (value%33#0: uint64, check%33#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%33#0) // account funded + let (value%34#0: uint64, check%34#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%34#0) // account funded + let (value%35#0: uint64, check%35#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%35#0) // account funded + let tmp%8#0: uint64 = (global CurrentApplicationID) + let tmp%9#0: bool = (app_opted_in account#0 tmp%8#0) + let (tmp%10#0: uint64, tmp%11#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%36#0: uint64, check%36#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%36#0) // account funded + let (value%37#0: uint64, check%37#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%37#0) // account funded + let (value%38#0: bytes, check%38#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%38#0) // account funded + let (value%39#0: uint64, check%39#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%39#0) // account funded + let (value%40#0: uint64, check%40#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%40#0) // account funded + let (value%41#0: uint64, check%41#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%41#0) // account funded + let (value%42#0: uint64, check%42#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%42#0) // account funded + let (value%43#0: uint64, check%43#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%43#0) // account funded + let (value%44#0: uint64, check%44#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%44#0) // account funded + let (value%45#0: uint64, check%45#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%45#0) // account funded + let (value%46#0: uint64, check%46#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%46#0) // account funded + let (value%47#0: uint64, check%47#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%47#0) // account funded + let tmp%12#0: uint64 = (global CurrentApplicationID) + let tmp%13#0: bool = (app_opted_in account#0 tmp%12#0) + let (tmp%14#0: uint64, tmp%15#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%48#0: uint64, check%48#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%48#0) // account funded + let (value%49#0: uint64, check%49#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%49#0) // account funded + let (value%50#0: bytes, check%50#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%50#0) // account funded + let (value%51#0: uint64, check%51#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%51#0) // account funded + let (value%52#0: uint64, check%52#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%52#0) // account funded + let (value%53#0: uint64, check%53#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%53#0) // account funded + let (value%54#0: uint64, check%54#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%54#0) // account funded + let (value%55#0: uint64, check%55#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%55#0) // account funded + let (value%56#0: uint64, check%56#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%56#0) // account funded + let (value%57#0: uint64, check%57#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%57#0) // account funded + let (value%58#0: uint64, check%58#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%58#0) // account funded + let (value%59#0: uint64, check%59#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%59#0) // account funded + let tmp%16#0: uint64 = (global CurrentApplicationID) + let tmp%17#0: bool = (app_opted_in account#0 tmp%16#0) + let (tmp%18#0: uint64, tmp%19#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%60#0: uint64, check%60#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%60#0) // account funded + let (value%61#0: uint64, check%61#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%61#0) // account funded + let (value%62#0: bytes, check%62#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%62#0) // account funded + let (value%63#0: uint64, check%63#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%63#0) // account funded + let (value%64#0: uint64, check%64#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%64#0) // account funded + let (value%65#0: uint64, check%65#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%65#0) // account funded + let (value%66#0: uint64, check%66#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%66#0) // account funded + let (value%67#0: uint64, check%67#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%67#0) // account funded + let (value%68#0: uint64, check%68#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%68#0) // account funded + let (value%69#0: uint64, check%69#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%69#0) // account funded + let (value%70#0: uint64, check%70#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%70#0) // account funded + let (value%71#0: uint64, check%71#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%71#0) // account funded + let tmp%20#0: uint64 = (global CurrentApplicationID) + let tmp%21#0: bool = (app_opted_in account#0 tmp%20#0) + let (tmp%22#0: uint64, tmp%23#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%72#0: uint64, check%72#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%72#0) // account funded + let (value%73#0: uint64, check%73#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%73#0) // account funded + let (value%74#0: bytes, check%74#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%74#0) // account funded + let (value%75#0: uint64, check%75#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%75#0) // account funded + let (value%76#0: uint64, check%76#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%76#0) // account funded + let (value%77#0: uint64, check%77#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%77#0) // account funded + let (value%78#0: uint64, check%78#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%78#0) // account funded + let (value%79#0: uint64, check%79#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%79#0) // account funded + let (value%80#0: uint64, check%80#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%80#0) // account funded + let (value%81#0: uint64, check%81#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%81#0) // account funded + let (value%82#0: uint64, check%82#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%82#0) // account funded + let (value%83#0: uint64, check%83#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%83#0) // account funded + let tmp%24#0: uint64 = (global CurrentApplicationID) + let tmp%25#0: bool = (app_opted_in account#0 tmp%24#0) + let (tmp%26#0: uint64, tmp%27#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%84#0: uint64, check%84#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%84#0) // account funded + let (value%85#0: uint64, check%85#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%85#0) // account funded + let (value%86#0: bytes, check%86#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%86#0) // account funded + let (value%87#0: uint64, check%87#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%87#0) // account funded + let (value%88#0: uint64, check%88#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%88#0) // account funded + let (value%89#0: uint64, check%89#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%89#0) // account funded + let (value%90#0: uint64, check%90#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%90#0) // account funded + let (value%91#0: uint64, check%91#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%91#0) // account funded + let (value%92#0: uint64, check%92#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%92#0) // account funded + let (value%93#0: uint64, check%93#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%93#0) // account funded + let (value%94#0: uint64, check%94#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%94#0) // account funded + let (value%95#0: uint64, check%95#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%95#0) // account funded + let tmp%28#0: uint64 = (global CurrentApplicationID) + let tmp%29#0: bool = (app_opted_in account#0 tmp%28#0) + let (tmp%30#0: uint64, tmp%31#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%96#0: uint64, check%96#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%96#0) // account funded + let (value%97#0: uint64, check%97#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%97#0) // account funded + let (value%98#0: bytes, check%98#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%98#0) // account funded + let (value%99#0: uint64, check%99#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%99#0) // account funded + let (value%100#0: uint64, check%100#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%100#0) // account funded + let (value%101#0: uint64, check%101#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%101#0) // account funded + let (value%102#0: uint64, check%102#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%102#0) // account funded + let (value%103#0: uint64, check%103#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%103#0) // account funded + let (value%104#0: uint64, check%104#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%104#0) // account funded + let (value%105#0: uint64, check%105#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%105#0) // account funded + let (value%106#0: uint64, check%106#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%106#0) // account funded + let (value%107#0: uint64, check%107#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%107#0) // account funded + let tmp%32#0: uint64 = (global CurrentApplicationID) + let tmp%33#0: bool = (app_opted_in account#0 tmp%32#0) + let (tmp%34#0: uint64, tmp%35#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%108#0: uint64, check%108#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%108#0) // account funded + let (value%109#0: uint64, check%109#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%109#0) // account funded + let (value%110#0: bytes, check%110#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%110#0) // account funded + let (value%111#0: uint64, check%111#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%111#0) // account funded + let (value%112#0: uint64, check%112#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%112#0) // account funded + let (value%113#0: uint64, check%113#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%113#0) // account funded + let (value%114#0: uint64, check%114#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%114#0) // account funded + let (value%115#0: uint64, check%115#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%115#0) // account funded + let (value%116#0: uint64, check%116#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%116#0) // account funded + let (value%117#0: uint64, check%117#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%117#0) // account funded + let (value%118#0: uint64, check%118#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%118#0) // account funded + let (value%119#0: uint64, check%119#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%119#0) // account funded + let tmp%36#0: uint64 = (global CurrentApplicationID) + let tmp%37#0: bool = (app_opted_in account#0 tmp%36#0) + let (tmp%38#0: uint64, tmp%39#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%120#0: uint64, check%120#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%120#0) // account funded + let (value%121#0: uint64, check%121#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%121#0) // account funded + let (value%122#0: bytes, check%122#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%122#0) // account funded + let (value%123#0: uint64, check%123#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%123#0) // account funded + let (value%124#0: uint64, check%124#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%124#0) // account funded + let (value%125#0: uint64, check%125#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%125#0) // account funded + let (value%126#0: uint64, check%126#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%126#0) // account funded + let (value%127#0: uint64, check%127#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%127#0) // account funded + let (value%128#0: uint64, check%128#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%128#0) // account funded + let (value%129#0: uint64, check%129#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%129#0) // account funded + let (value%130#0: uint64, check%130#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%130#0) // account funded + let (value%131#0: uint64, check%131#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%131#0) // account funded + let tmp%40#0: uint64 = (global CurrentApplicationID) + let tmp%41#0: bool = (app_opted_in account#0 tmp%40#0) + let (tmp%42#0: uint64, tmp%43#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%132#0: uint64, check%132#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%132#0) // account funded + let (value%133#0: uint64, check%133#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%133#0) // account funded + let (value%134#0: bytes, check%134#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%134#0) // account funded + let (value%135#0: uint64, check%135#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%135#0) // account funded + let (value%136#0: uint64, check%136#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%136#0) // account funded + let (value%137#0: uint64, check%137#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%137#0) // account funded + let (value%138#0: uint64, check%138#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%138#0) // account funded + let (value%139#0: uint64, check%139#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%139#0) // account funded + let (value%140#0: uint64, check%140#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%140#0) // account funded + let (value%141#0: uint64, check%141#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%141#0) // account funded + let (value%142#0: uint64, check%142#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%142#0) // account funded + let (value%143#0: uint64, check%143#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%143#0) // account funded + let tmp%44#0: uint64 = (global CurrentApplicationID) + let tmp%45#0: bool = (app_opted_in account#0 tmp%44#0) + let (tmp%46#0: uint64, tmp%47#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%144#0: uint64, check%144#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%144#0) // account funded + let (value%145#0: uint64, check%145#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%145#0) // account funded + let (value%146#0: bytes, check%146#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%146#0) // account funded + let (value%147#0: uint64, check%147#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%147#0) // account funded + let (value%148#0: uint64, check%148#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%148#0) // account funded + let (value%149#0: uint64, check%149#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%149#0) // account funded + let (value%150#0: uint64, check%150#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%150#0) // account funded + let (value%151#0: uint64, check%151#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%151#0) // account funded + let (value%152#0: uint64, check%152#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%152#0) // account funded + let (value%153#0: uint64, check%153#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%153#0) // account funded + let (value%154#0: uint64, check%154#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%154#0) // account funded + let (value%155#0: uint64, check%155#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%155#0) // account funded + let tmp%48#0: uint64 = (global CurrentApplicationID) + let tmp%49#0: bool = (app_opted_in account#0 tmp%48#0) + let (tmp%50#0: uint64, tmp%51#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%156#0: uint64, check%156#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%156#0) // account funded + let (value%157#0: uint64, check%157#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%157#0) // account funded + let (value%158#0: bytes, check%158#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%158#0) // account funded + let (value%159#0: uint64, check%159#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%159#0) // account funded + let (value%160#0: uint64, check%160#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%160#0) // account funded + let (value%161#0: uint64, check%161#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%161#0) // account funded + let (value%162#0: uint64, check%162#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%162#0) // account funded + let (value%163#0: uint64, check%163#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%163#0) // account funded + let (value%164#0: uint64, check%164#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%164#0) // account funded + let (value%165#0: uint64, check%165#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%165#0) // account funded + let (value%166#0: uint64, check%166#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%166#0) // account funded + let (value%167#0: uint64, check%167#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%167#0) // account funded + let tmp%52#0: uint64 = (global CurrentApplicationID) + let tmp%53#0: bool = (app_opted_in account#0 tmp%52#0) + let (tmp%54#0: uint64, tmp%55#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + let (value%168#0: uint64, check%168#0: bool) = ((acct_params_get AcctBalance) account#0) + (assert check%168#0) // account funded + let (value%169#0: uint64, check%169#0: bool) = ((acct_params_get AcctMinBalance) account#0) + (assert check%169#0) // account funded + let (value%170#0: bytes, check%170#0: bool) = ((acct_params_get AcctAuthAddr) account#0) + (assert check%170#0) // account funded + let (value%171#0: uint64, check%171#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) + (assert check%171#0) // account funded + let (value%172#0: uint64, check%172#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) + (assert check%172#0) // account funded + let (value%173#0: uint64, check%173#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) + (assert check%173#0) // account funded + let (value%174#0: uint64, check%174#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) + (assert check%174#0) // account funded + let (value%175#0: uint64, check%175#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) + (assert check%175#0) // account funded + let (value%176#0: uint64, check%176#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) + (assert check%176#0) // account funded + let (value%177#0: uint64, check%177#0: bool) = ((acct_params_get AcctTotalAssets) account#0) + (assert check%177#0) // account funded + let (value%178#0: uint64, check%178#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) + (assert check%178#0) // account funded + let (value%179#0: uint64, check%179#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) + (assert check%179#0) // account funded + let tmp%56#0: uint64 = (global CurrentApplicationID) + let tmp%57#0: bool = (app_opted_in account#0 tmp%56#0) + let (tmp%58#0: uint64, tmp%59#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) + return account#0 value%12#0 value%25#0 value%38#0 value%51#0 value%64#0 value%77#0 value%90#0 value%103#0 value%116#0 value%129#0 value%142#0 value%155#0 tmp%53#0 tmp%59#0 + +subroutine tests/approvals/accounts.algo.ts::AccountsContract.__algots__.defaultCreate() -> void: + block@0: // L4 + return + +subroutine _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void: + block@0: // L12 + let required_budget_with_buffer#0: uint64 = (+ required_budget#0 10u) + goto block@1 + block@1: // while_top_L20 + let tmp%0#0: uint64 = (global OpcodeBudget) + let tmp%1#0: bool = (> required_budget_with_buffer#0 tmp%0#0) + goto tmp%1#0 ? block@2 : block@7 + block@2: // while_body_L21 + itxn_begin + ((itxn_field TypeEnum) appl) + ((itxn_field OnCompletion) DeleteApplication) + ((itxn_field ApprovalProgram) 0x068101) + ((itxn_field ClearStateProgram) 0x068101) + switch fee_source#0 {0u => block@3, 1u => block@4, * => block@5} + block@3: // switch_case_0_L28 + ((itxn_field Fee) 0u) + goto block@6 + block@4: // switch_case_1_L30 + let tmp%2#0: uint64 = (global MinTxnFee) + ((itxn_field Fee) tmp%2#0) + goto block@6 + block@5: // switch_case_default_L26 + goto block@6 + block@6: // switch_case_next_L26 + itxn_submit + goto block@1 + block@7: // after_while_L20 + return \ No newline at end of file diff --git a/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.clear.0.ssa.ir b/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/accounts/AccountsContract.ir/AccountsContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/accounts/AccountsContract.ssa.ir b/tests/approvals/out/accounts/AccountsContract.ssa.ir deleted file mode 100644 index 744b09c9..00000000 --- a/tests/approvals/out/accounts/AccountsContract.ssa.ir +++ /dev/null @@ -1,549 +0,0 @@ -contract tests/approvals/accounts.algo.ts::AccountsContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/accounts.algo.ts::AccountsContract.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getAccountInfo(account,asset)(byte[],uint64,uint64,byte[],uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,bool,bool)" => block@2, * => block@3} - block@2: // getAccountInfo_route_L5 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - let tmp%9#0: bytes = ((txnas Accounts) tmp%8#0) - let tmp%10#0: bytes = (txna ApplicationArgs 2) - let tmp%11#0: uint64 = (btoi tmp%10#0) - let tmp%12#0: uint64 = ((txnas Assets) tmp%11#0) - let (elements_to_encode%0#0: bytes, elements_to_encode%1#0: uint64, elements_to_encode%2#0: uint64, elements_to_encode%3#0: bytes, elements_to_encode%4#0: uint64, elements_to_encode%5#0: uint64, elements_to_encode%6#0: uint64, elements_to_encode%7#0: uint64, elements_to_encode%8#0: uint64, elements_to_encode%9#0: uint64, elements_to_encode%10#0: uint64, elements_to_encode%11#0: uint64, elements_to_encode%12#0: uint64, elements_to_encode%13#0: bool, elements_to_encode%14#0: bool) = tests/approvals/accounts.algo.ts::AccountsContract.getAccountInfo(tmp%9#0, tmp%12#0) - let length%0#0: uint64 = (len elements_to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%0#0) - let val_as_bytes%0#0: bytes = (itob elements_to_encode%1#0) - let val_as_bytes%1#0: bytes = (itob elements_to_encode%2#0) - let length%1#0: uint64 = (len elements_to_encode%3#0) - let as_bytes%1#0: bytes = (itob length%1#0) - let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 elements_to_encode%3#0) - let val_as_bytes%2#0: bytes = (itob elements_to_encode%4#0) - let val_as_bytes%3#0: bytes = (itob elements_to_encode%5#0) - let val_as_bytes%4#0: bytes = (itob elements_to_encode%6#0) - let val_as_bytes%5#0: bytes = (itob elements_to_encode%7#0) - let val_as_bytes%6#0: bytes = (itob elements_to_encode%8#0) - let val_as_bytes%7#0: bytes = (itob elements_to_encode%9#0) - let val_as_bytes%8#0: bytes = (itob elements_to_encode%10#0) - let val_as_bytes%9#0: bytes = (itob elements_to_encode%11#0) - let val_as_bytes%10#0: bytes = (itob elements_to_encode%12#0) - let encoded_bool%0#0: bytes = (setbit 0x00 0u elements_to_encode%13#0) - let encoded_bool%1#0: bytes = (setbit 0x00 0u elements_to_encode%14#0) - let current_tail_offset%0#0: uint64 = 93u - let encoded_tuple_buffer%0#0: bytes = 0x - let as_bytes%2#0: bytes = (itob current_tail_offset%0#0) - let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%2#0) - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) - let data_length%0#0: uint64 = (len encoded_value%0#0) - let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%0#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 val_as_bytes%1#0) - let as_bytes%3#0: bytes = (itob current_tail_offset%1#0) - let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%3#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 offset_as_uint16%1#0) - let data_length%1#0: uint64 = (len encoded_value%1#0) - let current_tail_offset%2#0: uint64 = (+ current_tail_offset%1#0 data_length%1#0) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%2#0) - let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 val_as_bytes%3#0) - let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) - let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%5#0) - let encoded_tuple_buffer%9#0: bytes = (concat encoded_tuple_buffer%8#0 val_as_bytes%6#0) - let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%7#0) - let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%8#0) - let encoded_tuple_buffer%12#0: bytes = (concat encoded_tuple_buffer%11#0 val_as_bytes%9#0) - let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 val_as_bytes%10#0) - let encoded_tuple_buffer%14#0: bytes = (concat encoded_tuple_buffer%13#0 encoded_bool%0#0) - let is_true%0#0: uint64 = (getbit encoded_bool%1#0 0u) - let encoded_tuple_buffer%15#0: bytes = (setbit encoded_tuple_buffer%14#0 737u is_true%0#0) - let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 encoded_value%0#0) - let encoded_tuple_buffer%17#0: bytes = (concat encoded_tuple_buffer%16#0 encoded_value%1#0) - let tmp%13#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%17#0) - (log tmp%13#0) - return 1u - block@3: // switch_case_default_L4 - goto block@4 - block@4: // switch_case_next_L4 - goto block@9 - block@5: // bare_routing_L4 - let tmp%14#0: uint64 = (txn OnCompletion) - switch tmp%14#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L4 - let tmp%15#0: uint64 = (txn ApplicationID) - let tmp%16#0: bool = (== tmp%15#0 0u) - (assert tmp%16#0) // can only call when creating - tests/approvals/accounts.algo.ts::AccountsContract.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L4 - goto block@8 - block@8: // switch_case_next_L4 - goto block@9 - block@9: // after_if_else_L4 - return 0u - - subroutine tests/approvals/accounts.algo.ts::AccountsContract.getAccountInfo(account: bytes, asset: uint64) -> : - block@0: // L5 - _puya_lib.util.ensure_budget(1400u, 0u) - let (value%0#0: uint64, check%0#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%0#0) // account funded - let (value%1#0: uint64, check%1#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%1#0) // account funded - let (value%2#0: bytes, check%2#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%2#0) // account funded - let (value%3#0: uint64, check%3#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%3#0) // account funded - let (value%4#0: uint64, check%4#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%4#0) // account funded - let (value%5#0: uint64, check%5#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%5#0) // account funded - let (value%6#0: uint64, check%6#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%6#0) // account funded - let (value%7#0: uint64, check%7#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%7#0) // account funded - let (value%8#0: uint64, check%8#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%8#0) // account funded - let (value%9#0: uint64, check%9#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%9#0) // account funded - let (value%10#0: uint64, check%10#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%10#0) // account funded - let (value%11#0: uint64, check%11#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%11#0) // account funded - let tmp%0#0: uint64 = (global CurrentApplicationID) - let tmp%1#0: bool = (app_opted_in account#0 tmp%0#0) - let (tmp%2#0: uint64, tmp%3#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%12#0: uint64, check%12#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%12#0) // account funded - let (value%13#0: uint64, check%13#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%13#0) // account funded - let (value%14#0: bytes, check%14#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%14#0) // account funded - let (value%15#0: uint64, check%15#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%15#0) // account funded - let (value%16#0: uint64, check%16#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%16#0) // account funded - let (value%17#0: uint64, check%17#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%17#0) // account funded - let (value%18#0: uint64, check%18#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%18#0) // account funded - let (value%19#0: uint64, check%19#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%19#0) // account funded - let (value%20#0: uint64, check%20#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%20#0) // account funded - let (value%21#0: uint64, check%21#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%21#0) // account funded - let (value%22#0: uint64, check%22#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%22#0) // account funded - let (value%23#0: uint64, check%23#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%23#0) // account funded - let tmp%4#0: uint64 = (global CurrentApplicationID) - let tmp%5#0: bool = (app_opted_in account#0 tmp%4#0) - let (tmp%6#0: uint64, tmp%7#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%24#0: uint64, check%24#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%24#0) // account funded - let (value%25#0: uint64, check%25#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%25#0) // account funded - let (value%26#0: bytes, check%26#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%26#0) // account funded - let (value%27#0: uint64, check%27#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%27#0) // account funded - let (value%28#0: uint64, check%28#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%28#0) // account funded - let (value%29#0: uint64, check%29#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%29#0) // account funded - let (value%30#0: uint64, check%30#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%30#0) // account funded - let (value%31#0: uint64, check%31#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%31#0) // account funded - let (value%32#0: uint64, check%32#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%32#0) // account funded - let (value%33#0: uint64, check%33#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%33#0) // account funded - let (value%34#0: uint64, check%34#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%34#0) // account funded - let (value%35#0: uint64, check%35#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%35#0) // account funded - let tmp%8#0: uint64 = (global CurrentApplicationID) - let tmp%9#0: bool = (app_opted_in account#0 tmp%8#0) - let (tmp%10#0: uint64, tmp%11#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%36#0: uint64, check%36#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%36#0) // account funded - let (value%37#0: uint64, check%37#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%37#0) // account funded - let (value%38#0: bytes, check%38#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%38#0) // account funded - let (value%39#0: uint64, check%39#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%39#0) // account funded - let (value%40#0: uint64, check%40#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%40#0) // account funded - let (value%41#0: uint64, check%41#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%41#0) // account funded - let (value%42#0: uint64, check%42#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%42#0) // account funded - let (value%43#0: uint64, check%43#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%43#0) // account funded - let (value%44#0: uint64, check%44#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%44#0) // account funded - let (value%45#0: uint64, check%45#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%45#0) // account funded - let (value%46#0: uint64, check%46#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%46#0) // account funded - let (value%47#0: uint64, check%47#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%47#0) // account funded - let tmp%12#0: uint64 = (global CurrentApplicationID) - let tmp%13#0: bool = (app_opted_in account#0 tmp%12#0) - let (tmp%14#0: uint64, tmp%15#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%48#0: uint64, check%48#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%48#0) // account funded - let (value%49#0: uint64, check%49#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%49#0) // account funded - let (value%50#0: bytes, check%50#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%50#0) // account funded - let (value%51#0: uint64, check%51#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%51#0) // account funded - let (value%52#0: uint64, check%52#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%52#0) // account funded - let (value%53#0: uint64, check%53#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%53#0) // account funded - let (value%54#0: uint64, check%54#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%54#0) // account funded - let (value%55#0: uint64, check%55#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%55#0) // account funded - let (value%56#0: uint64, check%56#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%56#0) // account funded - let (value%57#0: uint64, check%57#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%57#0) // account funded - let (value%58#0: uint64, check%58#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%58#0) // account funded - let (value%59#0: uint64, check%59#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%59#0) // account funded - let tmp%16#0: uint64 = (global CurrentApplicationID) - let tmp%17#0: bool = (app_opted_in account#0 tmp%16#0) - let (tmp%18#0: uint64, tmp%19#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%60#0: uint64, check%60#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%60#0) // account funded - let (value%61#0: uint64, check%61#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%61#0) // account funded - let (value%62#0: bytes, check%62#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%62#0) // account funded - let (value%63#0: uint64, check%63#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%63#0) // account funded - let (value%64#0: uint64, check%64#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%64#0) // account funded - let (value%65#0: uint64, check%65#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%65#0) // account funded - let (value%66#0: uint64, check%66#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%66#0) // account funded - let (value%67#0: uint64, check%67#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%67#0) // account funded - let (value%68#0: uint64, check%68#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%68#0) // account funded - let (value%69#0: uint64, check%69#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%69#0) // account funded - let (value%70#0: uint64, check%70#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%70#0) // account funded - let (value%71#0: uint64, check%71#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%71#0) // account funded - let tmp%20#0: uint64 = (global CurrentApplicationID) - let tmp%21#0: bool = (app_opted_in account#0 tmp%20#0) - let (tmp%22#0: uint64, tmp%23#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%72#0: uint64, check%72#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%72#0) // account funded - let (value%73#0: uint64, check%73#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%73#0) // account funded - let (value%74#0: bytes, check%74#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%74#0) // account funded - let (value%75#0: uint64, check%75#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%75#0) // account funded - let (value%76#0: uint64, check%76#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%76#0) // account funded - let (value%77#0: uint64, check%77#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%77#0) // account funded - let (value%78#0: uint64, check%78#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%78#0) // account funded - let (value%79#0: uint64, check%79#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%79#0) // account funded - let (value%80#0: uint64, check%80#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%80#0) // account funded - let (value%81#0: uint64, check%81#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%81#0) // account funded - let (value%82#0: uint64, check%82#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%82#0) // account funded - let (value%83#0: uint64, check%83#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%83#0) // account funded - let tmp%24#0: uint64 = (global CurrentApplicationID) - let tmp%25#0: bool = (app_opted_in account#0 tmp%24#0) - let (tmp%26#0: uint64, tmp%27#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%84#0: uint64, check%84#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%84#0) // account funded - let (value%85#0: uint64, check%85#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%85#0) // account funded - let (value%86#0: bytes, check%86#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%86#0) // account funded - let (value%87#0: uint64, check%87#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%87#0) // account funded - let (value%88#0: uint64, check%88#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%88#0) // account funded - let (value%89#0: uint64, check%89#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%89#0) // account funded - let (value%90#0: uint64, check%90#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%90#0) // account funded - let (value%91#0: uint64, check%91#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%91#0) // account funded - let (value%92#0: uint64, check%92#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%92#0) // account funded - let (value%93#0: uint64, check%93#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%93#0) // account funded - let (value%94#0: uint64, check%94#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%94#0) // account funded - let (value%95#0: uint64, check%95#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%95#0) // account funded - let tmp%28#0: uint64 = (global CurrentApplicationID) - let tmp%29#0: bool = (app_opted_in account#0 tmp%28#0) - let (tmp%30#0: uint64, tmp%31#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%96#0: uint64, check%96#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%96#0) // account funded - let (value%97#0: uint64, check%97#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%97#0) // account funded - let (value%98#0: bytes, check%98#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%98#0) // account funded - let (value%99#0: uint64, check%99#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%99#0) // account funded - let (value%100#0: uint64, check%100#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%100#0) // account funded - let (value%101#0: uint64, check%101#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%101#0) // account funded - let (value%102#0: uint64, check%102#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%102#0) // account funded - let (value%103#0: uint64, check%103#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%103#0) // account funded - let (value%104#0: uint64, check%104#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%104#0) // account funded - let (value%105#0: uint64, check%105#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%105#0) // account funded - let (value%106#0: uint64, check%106#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%106#0) // account funded - let (value%107#0: uint64, check%107#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%107#0) // account funded - let tmp%32#0: uint64 = (global CurrentApplicationID) - let tmp%33#0: bool = (app_opted_in account#0 tmp%32#0) - let (tmp%34#0: uint64, tmp%35#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%108#0: uint64, check%108#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%108#0) // account funded - let (value%109#0: uint64, check%109#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%109#0) // account funded - let (value%110#0: bytes, check%110#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%110#0) // account funded - let (value%111#0: uint64, check%111#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%111#0) // account funded - let (value%112#0: uint64, check%112#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%112#0) // account funded - let (value%113#0: uint64, check%113#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%113#0) // account funded - let (value%114#0: uint64, check%114#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%114#0) // account funded - let (value%115#0: uint64, check%115#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%115#0) // account funded - let (value%116#0: uint64, check%116#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%116#0) // account funded - let (value%117#0: uint64, check%117#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%117#0) // account funded - let (value%118#0: uint64, check%118#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%118#0) // account funded - let (value%119#0: uint64, check%119#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%119#0) // account funded - let tmp%36#0: uint64 = (global CurrentApplicationID) - let tmp%37#0: bool = (app_opted_in account#0 tmp%36#0) - let (tmp%38#0: uint64, tmp%39#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%120#0: uint64, check%120#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%120#0) // account funded - let (value%121#0: uint64, check%121#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%121#0) // account funded - let (value%122#0: bytes, check%122#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%122#0) // account funded - let (value%123#0: uint64, check%123#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%123#0) // account funded - let (value%124#0: uint64, check%124#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%124#0) // account funded - let (value%125#0: uint64, check%125#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%125#0) // account funded - let (value%126#0: uint64, check%126#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%126#0) // account funded - let (value%127#0: uint64, check%127#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%127#0) // account funded - let (value%128#0: uint64, check%128#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%128#0) // account funded - let (value%129#0: uint64, check%129#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%129#0) // account funded - let (value%130#0: uint64, check%130#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%130#0) // account funded - let (value%131#0: uint64, check%131#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%131#0) // account funded - let tmp%40#0: uint64 = (global CurrentApplicationID) - let tmp%41#0: bool = (app_opted_in account#0 tmp%40#0) - let (tmp%42#0: uint64, tmp%43#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%132#0: uint64, check%132#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%132#0) // account funded - let (value%133#0: uint64, check%133#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%133#0) // account funded - let (value%134#0: bytes, check%134#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%134#0) // account funded - let (value%135#0: uint64, check%135#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%135#0) // account funded - let (value%136#0: uint64, check%136#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%136#0) // account funded - let (value%137#0: uint64, check%137#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%137#0) // account funded - let (value%138#0: uint64, check%138#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%138#0) // account funded - let (value%139#0: uint64, check%139#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%139#0) // account funded - let (value%140#0: uint64, check%140#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%140#0) // account funded - let (value%141#0: uint64, check%141#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%141#0) // account funded - let (value%142#0: uint64, check%142#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%142#0) // account funded - let (value%143#0: uint64, check%143#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%143#0) // account funded - let tmp%44#0: uint64 = (global CurrentApplicationID) - let tmp%45#0: bool = (app_opted_in account#0 tmp%44#0) - let (tmp%46#0: uint64, tmp%47#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%144#0: uint64, check%144#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%144#0) // account funded - let (value%145#0: uint64, check%145#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%145#0) // account funded - let (value%146#0: bytes, check%146#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%146#0) // account funded - let (value%147#0: uint64, check%147#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%147#0) // account funded - let (value%148#0: uint64, check%148#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%148#0) // account funded - let (value%149#0: uint64, check%149#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%149#0) // account funded - let (value%150#0: uint64, check%150#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%150#0) // account funded - let (value%151#0: uint64, check%151#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%151#0) // account funded - let (value%152#0: uint64, check%152#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%152#0) // account funded - let (value%153#0: uint64, check%153#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%153#0) // account funded - let (value%154#0: uint64, check%154#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%154#0) // account funded - let (value%155#0: uint64, check%155#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%155#0) // account funded - let tmp%48#0: uint64 = (global CurrentApplicationID) - let tmp%49#0: bool = (app_opted_in account#0 tmp%48#0) - let (tmp%50#0: uint64, tmp%51#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%156#0: uint64, check%156#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%156#0) // account funded - let (value%157#0: uint64, check%157#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%157#0) // account funded - let (value%158#0: bytes, check%158#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%158#0) // account funded - let (value%159#0: uint64, check%159#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%159#0) // account funded - let (value%160#0: uint64, check%160#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%160#0) // account funded - let (value%161#0: uint64, check%161#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%161#0) // account funded - let (value%162#0: uint64, check%162#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%162#0) // account funded - let (value%163#0: uint64, check%163#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%163#0) // account funded - let (value%164#0: uint64, check%164#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%164#0) // account funded - let (value%165#0: uint64, check%165#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%165#0) // account funded - let (value%166#0: uint64, check%166#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%166#0) // account funded - let (value%167#0: uint64, check%167#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%167#0) // account funded - let tmp%52#0: uint64 = (global CurrentApplicationID) - let tmp%53#0: bool = (app_opted_in account#0 tmp%52#0) - let (tmp%54#0: uint64, tmp%55#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - let (value%168#0: uint64, check%168#0: bool) = ((acct_params_get AcctBalance) account#0) - (assert check%168#0) // account funded - let (value%169#0: uint64, check%169#0: bool) = ((acct_params_get AcctMinBalance) account#0) - (assert check%169#0) // account funded - let (value%170#0: bytes, check%170#0: bool) = ((acct_params_get AcctAuthAddr) account#0) - (assert check%170#0) // account funded - let (value%171#0: uint64, check%171#0: bool) = ((acct_params_get AcctTotalNumUint) account#0) - (assert check%171#0) // account funded - let (value%172#0: uint64, check%172#0: bool) = ((acct_params_get AcctTotalNumByteSlice) account#0) - (assert check%172#0) // account funded - let (value%173#0: uint64, check%173#0: bool) = ((acct_params_get AcctTotalExtraAppPages) account#0) - (assert check%173#0) // account funded - let (value%174#0: uint64, check%174#0: bool) = ((acct_params_get AcctTotalAppsCreated) account#0) - (assert check%174#0) // account funded - let (value%175#0: uint64, check%175#0: bool) = ((acct_params_get AcctTotalAppsOptedIn) account#0) - (assert check%175#0) // account funded - let (value%176#0: uint64, check%176#0: bool) = ((acct_params_get AcctTotalAssetsCreated) account#0) - (assert check%176#0) // account funded - let (value%177#0: uint64, check%177#0: bool) = ((acct_params_get AcctTotalAssets) account#0) - (assert check%177#0) // account funded - let (value%178#0: uint64, check%178#0: bool) = ((acct_params_get AcctTotalBoxes) account#0) - (assert check%178#0) // account funded - let (value%179#0: uint64, check%179#0: bool) = ((acct_params_get AcctTotalBoxBytes) account#0) - (assert check%179#0) // account funded - let tmp%56#0: uint64 = (global CurrentApplicationID) - let tmp%57#0: bool = (app_opted_in account#0 tmp%56#0) - let (tmp%58#0: uint64, tmp%59#0: bool) = ((asset_holding_get AssetBalance) account#0 asset#0) - return account#0 value%12#0 value%25#0 value%38#0 value%51#0 value%64#0 value%77#0 value%90#0 value%103#0 value%116#0 value%129#0 value%142#0 value%155#0 tmp%53#0 tmp%59#0 - - subroutine tests/approvals/accounts.algo.ts::AccountsContract.__algots__.defaultCreate() -> void: - block@0: // L4 - return - - subroutine _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void: - block@0: // L12 - let required_budget_with_buffer#0: uint64 = (+ required_budget#0 10u) - goto block@1 - block@1: // while_top_L20 - let tmp%0#0: uint64 = (global OpcodeBudget) - let tmp%1#0: bool = (> required_budget_with_buffer#0 tmp%0#0) - goto tmp%1#0 ? block@2 : block@7 - block@2: // while_body_L21 - itxn_begin - ((itxn_field TypeEnum) appl) - ((itxn_field OnCompletion) DeleteApplication) - ((itxn_field ApprovalProgram) 0x068101) - ((itxn_field ClearStateProgram) 0x068101) - switch fee_source#0 {0u => block@3, 1u => block@4, * => block@5} - block@3: // switch_case_0_L28 - ((itxn_field Fee) 0u) - goto block@6 - block@4: // switch_case_1_L30 - let tmp%2#0: uint64 = (global MinTxnFee) - ((itxn_field Fee) tmp%2#0) - goto block@6 - block@5: // switch_case_default_L26 - goto block@6 - block@6: // switch_case_next_L26 - itxn_submit - goto block@1 - block@7: // after_while_L20 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc28-events/EventEmitter.approval.teal b/tests/approvals/out/arc28-events/EventEmitter.approval.teal index f809a4d6..727d1332 100644 --- a/tests/approvals/out/arc28-events/EventEmitter.approval.teal +++ b/tests/approvals/out/arc28-events/EventEmitter.approval.teal @@ -1,31 +1,43 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc28-events.algo.ts::EventEmitter.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock 0x 0x1ccbd925 - callsub __puya_arc4_router__ - return - -// tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/arc28-events.algo.ts:12 // class EventEmitter extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/arc28-events.algo.ts:12 + // class EventEmitter extends Contract { txna ApplicationArgs 0 pushbytes 0xd43cee5d // method "emitSwapped(uint64,uint64)void" pushbytes 0xf14889d7 // method "emitCustom(string,bool)void" uncover 2 - match __puya_arc4_router___emitSwapped_route@2 __puya_arc4_router___emitCustom_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_emitSwapped_route@3 main_emitCustom_route@4 -__puya_arc4_router___emitSwapped_route@2: - // tests/approvals/arc28-events.algo.ts:13 - // emitSwapped(a: uint64, b: uint64) { +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/arc28-events.algo.ts:12 + // class EventEmitter extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__@12: + return + +main_emitCustom_route@4: + // tests/approvals/arc28-events.algo.ts:28 + // emitCustom(arg0: string, arg1: boolean) { txn OnCompletion intc_0 // NoOp == @@ -37,18 +49,19 @@ __puya_arc4_router___emitSwapped_route@2: // tests/approvals/arc28-events.algo.ts:12 // class EventEmitter extends Contract { txna ApplicationArgs 1 - btoi + extract 2 0 txna ApplicationArgs 2 - btoi - // tests/approvals/arc28-events.algo.ts:13 - // emitSwapped(a: uint64, b: uint64) { - callsub emitSwapped - intc_1 // 1 - retsub - -__puya_arc4_router___emitCustom_route@3: + intc_0 // 0 + getbit // tests/approvals/arc28-events.algo.ts:28 // emitCustom(arg0: string, arg1: boolean) { + callsub emitCustom + intc_1 // 1 + b main_after_inlined_tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 + +main_emitSwapped_route@3: + // tests/approvals/arc28-events.algo.ts:13 + // emitSwapped(a: uint64, b: uint64) { txn OnCompletion intc_0 // NoOp == @@ -60,29 +73,29 @@ __puya_arc4_router___emitCustom_route@3: // tests/approvals/arc28-events.algo.ts:12 // class EventEmitter extends Contract { txna ApplicationArgs 1 - extract 2 0 + btoi txna ApplicationArgs 2 - intc_0 // 0 - getbit - // tests/approvals/arc28-events.algo.ts:28 - // emitCustom(arg0: string, arg1: boolean) { - callsub emitCustom + btoi + // tests/approvals/arc28-events.algo.ts:13 + // emitSwapped(a: uint64, b: uint64) { + callsub emitSwapped intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 + b main_after_inlined_tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/arc28-events.algo.ts:12 // class EventEmitter extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/arc28-events.algo.ts:12 // class EventEmitter extends Contract { txn ApplicationID @@ -91,15 +104,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/arc28-events.algo.ts:12 - // class EventEmitter extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__@12 // tests/approvals/arc28-events.algo.ts::EventEmitter.emitSwapped(a: uint64, b: uint64) -> void: diff --git a/tests/approvals/out/arc28-events/EventEmitter.arc32.json b/tests/approvals/out/arc28-events/EventEmitter.arc32.json index b6a4f0a2..d3f40d70 100644 --- a/tests/approvals/out/arc28-events/EventEmitter.arc32.json +++ b/tests/approvals/out/arc28-events/EventEmitter.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MWNjYmQ5MjUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZDQzY2VlNWQgLy8gbWV0aG9kICJlbWl0U3dhcHBlZCh1aW50NjQsdWludDY0KXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmMTQ4ODlkNyAvLyBtZXRob2QgImVtaXRDdXN0b20oc3RyaW5nLGJvb2wpdm9pZCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fZW1pdFN3YXBwZWRfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0Q3VzdG9tX3JvdXRlQDMKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0U3dhcHBlZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSB7CiAgICBjYWxsc3ViIGVtaXRTd2FwcGVkCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0Q3VzdG9tX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MjgKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MjgKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTYKICAgIC8vIGNvbnN0IHg6IFN3YXBwZWQgPSB7IGE6IGIsIGI6IGEgfQogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMAogICAgLy8gYTogbmV3IFVpbnRONjQoYiksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMQogICAgLy8gYjogbmV3IFVpbnRONjQoYSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxOS0yMgogICAgLy8gY29uc3QgeSA9IG5ldyBTd2FwcGVkQXJjNCh7CiAgICAvLyAgIGE6IG5ldyBVaW50TjY0KGIpLAogICAgLy8gICBiOiBuZXcgVWludE42NChhKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjIzCiAgICAvLyBlbWl0KHkpCiAgICBwdXNoYnl0ZXMgMHhiYmFiNzM3OCAvLyBtZXRob2QgIlN3YXBwZWRBcmM0KHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdEN1c3RvbShhcmcwOiBzdHJpbmcsIGFyZzE6IGJvb2xlYW4pIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI5CiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgcHVzaGludCAzIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhhMzEzYzA2NiAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MWNjYmQ5MjUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhkNDNjZWU1ZCAvLyBtZXRob2QgImVtaXRTd2FwcGVkKHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlcyAweGYxNDg4OWQ3IC8vIG1ldGhvZCAiZW1pdEN1c3RvbShzdHJpbmcsYm9vbCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTI6CiAgICByZXR1cm4KCm1haW5fZW1pdEN1c3RvbV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgY2FsbHN1YiBlbWl0Q3VzdG9tCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTYKICAgIC8vIGNvbnN0IHg6IFN3YXBwZWQgPSB7IGE6IGIsIGI6IGEgfQogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMAogICAgLy8gYTogbmV3IFVpbnRONjQoYiksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMQogICAgLy8gYjogbmV3IFVpbnRONjQoYSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxOS0yMgogICAgLy8gY29uc3QgeSA9IG5ldyBTd2FwcGVkQXJjNCh7CiAgICAvLyAgIGE6IG5ldyBVaW50TjY0KGIpLAogICAgLy8gICBiOiBuZXcgVWludE42NChhKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjIzCiAgICAvLyBlbWl0KHkpCiAgICBwdXNoYnl0ZXMgMHhiYmFiNzM3OCAvLyBtZXRob2QgIlN3YXBwZWRBcmM0KHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdEN1c3RvbShhcmcwOiBzdHJpbmcsIGFyZzE6IGJvb2xlYW4pIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI5CiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgcHVzaGludCAzIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhhMzEzYzA2NiAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/arc28-events/EventEmitter.arc56.json b/tests/approvals/out/arc28-events/EventEmitter.arc56.json index dd14aba5..18f4ac2f 100644 --- a/tests/approvals/out/arc28-events/EventEmitter.arc56.json +++ b/tests/approvals/out/arc28-events/EventEmitter.arc56.json @@ -145,21 +145,21 @@ "sourceInfo": [ { "pc": [ - 57, - 80 + 49, + 77 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 120 + 113 ], "errorMessage": "can only call when creating" }, { "pc": [ - 62, - 85 + 54, + 82 ], "errorMessage": "can only call when not creating" } @@ -172,8 +172,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MWNjYmQ5MjUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZDQzY2VlNWQgLy8gbWV0aG9kICJlbWl0U3dhcHBlZCh1aW50NjQsdWludDY0KXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmMTQ4ODlkNyAvLyBtZXRob2QgImVtaXRDdXN0b20oc3RyaW5nLGJvb2wpdm9pZCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fZW1pdFN3YXBwZWRfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0Q3VzdG9tX3JvdXRlQDMKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0U3dhcHBlZF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTMKICAgIC8vIGVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSB7CiAgICBjYWxsc3ViIGVtaXRTd2FwcGVkCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19lbWl0Q3VzdG9tX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MjgKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MjgKICAgIC8vIGVtaXRDdXN0b20oYXJnMDogc3RyaW5nLCBhcmcxOiBib29sZWFuKSB7CiAgICBjYWxsc3ViIGVtaXRDdXN0b20KICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTYKICAgIC8vIGNvbnN0IHg6IFN3YXBwZWQgPSB7IGE6IGIsIGI6IGEgfQogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMAogICAgLy8gYTogbmV3IFVpbnRONjQoYiksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMQogICAgLy8gYjogbmV3IFVpbnRONjQoYSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxOS0yMgogICAgLy8gY29uc3QgeSA9IG5ldyBTd2FwcGVkQXJjNCh7CiAgICAvLyAgIGE6IG5ldyBVaW50TjY0KGIpLAogICAgLy8gICBiOiBuZXcgVWludE42NChhKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjIzCiAgICAvLyBlbWl0KHkpCiAgICBwdXNoYnl0ZXMgMHhiYmFiNzM3OCAvLyBtZXRob2QgIlN3YXBwZWRBcmM0KHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdEN1c3RvbShhcmcwOiBzdHJpbmcsIGFyZzE6IGJvb2xlYW4pIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI5CiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgcHVzaGludCAzIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhhMzEzYzA2NiAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MWNjYmQ5MjUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhkNDNjZWU1ZCAvLyBtZXRob2QgImVtaXRTd2FwcGVkKHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlcyAweGYxNDg4OWQ3IC8vIG1ldGhvZCAiZW1pdEN1c3RvbShzdHJpbmcsYm9vbCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2VtaXRTd2FwcGVkX3JvdXRlQDMgbWFpbl9lbWl0Q3VzdG9tX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTIKICAgIC8vIGNsYXNzIEV2ZW50RW1pdHRlciBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTI6CiAgICByZXR1cm4KCm1haW5fZW1pdEN1c3RvbV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI4CiAgICAvLyBlbWl0Q3VzdG9tKGFyZzA6IHN0cmluZywgYXJnMTogYm9vbGVhbikgewogICAgY2FsbHN1YiBlbWl0Q3VzdG9tCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZW1pdFN3YXBwZWRfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEzCiAgICAvLyBlbWl0U3dhcHBlZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgewogICAgY2FsbHN1YiBlbWl0U3dhcHBlZAogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6OkV2ZW50RW1pdHRlci5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRTd2FwcGVkKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB2b2lkOgplbWl0U3dhcHBlZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxMwogICAgLy8gZW1pdFN3YXBwZWQoYTogdWludDY0LCBiOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjE0CiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsgYTogYiwgYjogYSB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIG1ldGhvZCAiU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjMjgtZXZlbnRzLmFsZ28udHM6MTYKICAgIC8vIGNvbnN0IHg6IFN3YXBwZWQgPSB7IGE6IGIsIGI6IGEgfQogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxNwogICAgLy8gZW1pdCh4KQogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMAogICAgLy8gYTogbmV3IFVpbnRONjQoYiksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyMQogICAgLy8gYjogbmV3IFVpbnRONjQoYSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoxOS0yMgogICAgLy8gY29uc3QgeSA9IG5ldyBTd2FwcGVkQXJjNCh7CiAgICAvLyAgIGE6IG5ldyBVaW50TjY0KGIpLAogICAgLy8gICBiOiBuZXcgVWludE42NChhKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjIzCiAgICAvLyBlbWl0KHkpCiAgICBwdXNoYnl0ZXMgMHhiYmFiNzM3OCAvLyBtZXRob2QgIlN3YXBwZWRBcmM0KHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyNQogICAgLy8gZW1pdCgnU3dhcHBlZCcsIGIsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJTd2FwcGVkKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czo6RXZlbnRFbWl0dGVyLmVtaXRDdXN0b20oYXJnMDogYnl0ZXMsIGFyZzE6IHVpbnQ2NCkgLT4gdm9pZDoKZW1pdEN1c3RvbToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmMyOC1ldmVudHMuYWxnby50czoyOAogICAgLy8gZW1pdEN1c3RvbShhcmcwOiBzdHJpbmcsIGFyZzE6IGJvb2xlYW4pIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjI5CiAgICAvLyBlbWl0KCdDdXN0b20nLCBhcmcwLCBhcmcxKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgcHVzaGludCAzIC8vIDMKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhhMzEzYzA2NiAvLyBtZXRob2QgIkN1c3RvbShzdHJpbmcsYm9vbCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjpFdmVudEVtaXR0ZXIuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzI4LWV2ZW50cy5hbGdvLnRzOjEyCiAgICAvLyBjbGFzcyBFdmVudEVtaXR0ZXIgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAgAEHMvZJTEbIhNBAE42GgCABNQ87l2ABPFIiddPAo4CAB4AAiJDMRkiEkQxGCITRDYaAVcCADYaAiJTiAB/I0L/4zEZIhJEMRgiE0Q2GgEXNhoCF4gAGyNC/8oxGSJMjgEAA0L/vjEYIhJEiAB6I0L/s4oCAIv/Fov+FkwoTFBMUClMULCL/4v+TBZMFkwoTFBMUClMULCL/xaL/hZMKExQTFCABLurc3hMULCL/xaL/hZMKExQTFApTFCwiYoCAIv+FRZXBgKL/lCAAQAii/9UgQMWVwYCKExQTFBMUIAEoxPAZkxQsImKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [ { diff --git a/tests/approvals/out/arc28-events/EventEmitter.clear.teal b/tests/approvals/out/arc28-events/EventEmitter.clear.teal index a157afbe..a4d58047 100644 --- a/tests/approvals/out/arc28-events/EventEmitter.clear.teal +++ b/tests/approvals/out/arc28-events/EventEmitter.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc28-events.algo.ts::EventEmitter.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir b/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir new file mode 100644 index 00000000..d344b9e5 --- /dev/null +++ b/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.approval.0.ssa.ir @@ -0,0 +1,122 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__() -> bool: + block@0: // L12 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L12 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "emitSwapped(uint64,uint64)void" => block@2, method "emitCustom(string,bool)void" => block@3, * => block@4} + block@2: // emitSwapped_route_L13 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + let tmp%9#0: bytes = (txna ApplicationArgs 2) + let tmp%10#0: uint64 = (btoi tmp%9#0) + tests/approvals/arc28-events.algo.ts::EventEmitter.emitSwapped(tmp%8#0, tmp%10#0) + return 1u + block@3: // emitCustom_route_L28 + let tmp%11#0: uint64 = (txn OnCompletion) + let tmp%12#0: bool = (== tmp%11#0 NoOp) + (assert tmp%12#0) // OnCompletion is not NoOp + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (!= tmp%13#0 0u) + (assert tmp%14#0) // can only call when not creating + let tmp%15#0: bytes = (txna ApplicationArgs 1) + let tmp%16#0: bytes = ((extract 2 0) tmp%15#0) + let tmp%17#0: bytes = (txna ApplicationArgs 2) + let tmp%18#0: bool = (getbit tmp%17#0 0u) + tests/approvals/arc28-events.algo.ts::EventEmitter.emitCustom(tmp%16#0, tmp%18#0) + return 1u + block@4: // switch_case_default_L12 + goto block@5 + block@5: // switch_case_next_L12 + goto block@10 + block@6: // bare_routing_L12 + let tmp%19#0: uint64 = (txn OnCompletion) + switch tmp%19#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L12 + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (== tmp%20#0 0u) + (assert tmp%21#0) // can only call when creating + tests/approvals/arc28-events.algo.ts::EventEmitter.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L12 + goto block@9 + block@9: // switch_case_next_L12 + goto block@10 + block@10: // after_if_else_L12 + return 0u + +subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.emitSwapped(a: uint64, b: uint64) -> void: + block@0: // L13 + let val_as_bytes%0#0: bytes = (itob b#0) + let val_as_bytes%1#0: bytes = (itob a#0) + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) + let event%0#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%2#0) + (log event%0#0) + let (x.a#0: uint64, x.b#0: uint64) = (b#0, a#0) + let val_as_bytes%2#0: bytes = (itob x.a#0) + let val_as_bytes%3#0: bytes = (itob x.b#0) + let current_tail_offset%1#0: uint64 = 16u + let encoded_tuple_buffer%3#0: bytes = 0x + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 val_as_bytes%2#0) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) + let event%1#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%5#0) + (log event%1#0) + let val_as_bytes%4#0: bytes = (itob b#0) + let val_as_bytes%5#0: bytes = (itob a#0) + let val_as_bytes%6#0: bytes = (itob b#0) + let val_as_bytes%7#0: bytes = (itob a#0) + let current_tail_offset%2#0: uint64 = 16u + let encoded_tuple_buffer%6#0: bytes = 0x + let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) + let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%7#0) + let y#0: bytes = encoded_tuple_buffer%8#0 + let event%2#0: bytes = (concat method "SwappedArc4(uint64,uint64)" y#0) + (log event%2#0) + let val_as_bytes%8#0: bytes = (itob b#0) + let val_as_bytes%9#0: bytes = (itob a#0) + let current_tail_offset%3#0: uint64 = 16u + let encoded_tuple_buffer%9#0: bytes = 0x + let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%8#0) + let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%9#0) + let event%3#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%11#0) + (log event%3#0) + return + +subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.emitCustom(arg0: bytes, arg1: bool) -> void: + block@0: // L28 + let length%0#0: uint64 = (len arg0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 arg0#0) + let encoded_bool%0#0: bytes = (setbit 0x00 0u arg1#0) + let current_tail_offset%0#0: uint64 = 3u + let encoded_tuple_buffer%0#0: bytes = 0x + let as_bytes%1#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 encoded_bool%0#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 encoded_value%0#0) + let event%0#0: bytes = (concat method "Custom(string,bool)" encoded_tuple_buffer%3#0) + (log event%0#0) + return + +subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.__algots__.defaultCreate() -> void: + block@0: // L12 + return \ No newline at end of file diff --git a/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.clear.0.ssa.ir b/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/arc28-events/EventEmitter.ir/EventEmitter.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc28-events/EventEmitter.ssa.ir b/tests/approvals/out/arc28-events/EventEmitter.ssa.ir deleted file mode 100644 index a9e1b887..00000000 --- a/tests/approvals/out/arc28-events/EventEmitter.ssa.ir +++ /dev/null @@ -1,129 +0,0 @@ -contract tests/approvals/arc28-events.algo.ts::EventEmitter: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.__puya_arc4_router__() -> bool: - block@0: // L12 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L12 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "emitSwapped(uint64,uint64)void" => block@2, method "emitCustom(string,bool)void" => block@3, * => block@4} - block@2: // emitSwapped_route_L13 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - let tmp%9#0: bytes = (txna ApplicationArgs 2) - let tmp%10#0: uint64 = (btoi tmp%9#0) - tests/approvals/arc28-events.algo.ts::EventEmitter.emitSwapped(tmp%8#0, tmp%10#0) - return 1u - block@3: // emitCustom_route_L28 - let tmp%11#0: uint64 = (txn OnCompletion) - let tmp%12#0: bool = (== tmp%11#0 NoOp) - (assert tmp%12#0) // OnCompletion is not NoOp - let tmp%13#0: uint64 = (txn ApplicationID) - let tmp%14#0: bool = (!= tmp%13#0 0u) - (assert tmp%14#0) // can only call when not creating - let tmp%15#0: bytes = (txna ApplicationArgs 1) - let tmp%16#0: bytes = ((extract 2 0) tmp%15#0) - let tmp%17#0: bytes = (txna ApplicationArgs 2) - let tmp%18#0: bool = (getbit tmp%17#0 0u) - tests/approvals/arc28-events.algo.ts::EventEmitter.emitCustom(tmp%16#0, tmp%18#0) - return 1u - block@4: // switch_case_default_L12 - goto block@5 - block@5: // switch_case_next_L12 - goto block@10 - block@6: // bare_routing_L12 - let tmp%19#0: uint64 = (txn OnCompletion) - switch tmp%19#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L12 - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (== tmp%20#0 0u) - (assert tmp%21#0) // can only call when creating - tests/approvals/arc28-events.algo.ts::EventEmitter.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L12 - goto block@9 - block@9: // switch_case_next_L12 - goto block@10 - block@10: // after_if_else_L12 - return 0u - - subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.emitSwapped(a: uint64, b: uint64) -> void: - block@0: // L13 - let val_as_bytes%0#0: bytes = (itob b#0) - let val_as_bytes%1#0: bytes = (itob a#0) - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) - let event%0#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%2#0) - (log event%0#0) - let (x.a#0: uint64, x.b#0: uint64) = (b#0, a#0) - let val_as_bytes%2#0: bytes = (itob x.a#0) - let val_as_bytes%3#0: bytes = (itob x.b#0) - let current_tail_offset%1#0: uint64 = 16u - let encoded_tuple_buffer%3#0: bytes = 0x - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 val_as_bytes%2#0) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) - let event%1#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%5#0) - (log event%1#0) - let val_as_bytes%4#0: bytes = (itob b#0) - let val_as_bytes%5#0: bytes = (itob a#0) - let val_as_bytes%6#0: bytes = (itob b#0) - let val_as_bytes%7#0: bytes = (itob a#0) - let current_tail_offset%2#0: uint64 = 16u - let encoded_tuple_buffer%6#0: bytes = 0x - let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) - let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%7#0) - let y#0: bytes = encoded_tuple_buffer%8#0 - let event%2#0: bytes = (concat method "SwappedArc4(uint64,uint64)" y#0) - (log event%2#0) - let val_as_bytes%8#0: bytes = (itob b#0) - let val_as_bytes%9#0: bytes = (itob a#0) - let current_tail_offset%3#0: uint64 = 16u - let encoded_tuple_buffer%9#0: bytes = 0x - let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%8#0) - let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%9#0) - let event%3#0: bytes = (concat method "Swapped(uint64,uint64)" encoded_tuple_buffer%11#0) - (log event%3#0) - return - - subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.emitCustom(arg0: bytes, arg1: bool) -> void: - block@0: // L28 - let length%0#0: uint64 = (len arg0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 arg0#0) - let encoded_bool%0#0: bytes = (setbit 0x00 0u arg1#0) - let current_tail_offset%0#0: uint64 = 3u - let encoded_tuple_buffer%0#0: bytes = 0x - let as_bytes%1#0: bytes = (itob current_tail_offset%0#0) - let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) - let data_length%0#0: uint64 = (len encoded_value%0#0) - let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 encoded_bool%0#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 encoded_value%0#0) - let event%0#0: bytes = (concat method "Custom(string,bool)" encoded_tuple_buffer%3#0) - (log event%0#0) - return - - subroutine tests/approvals/arc28-events.algo.ts::EventEmitter.__algots__.defaultCreate() -> void: - block@0: // L12 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.approval.teal b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.approval.teal index 82a644d9..afe4d657 100644 --- a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.approval.teal +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.approval.teal @@ -1,63 +1,41 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.approvalProgram: - intcblock 0 1 8 64 +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 8 1 64 bytecblock 0x00 0x - callsub __puya_arc4_router__ - return - -// tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/arc4-encode-decode.algo.ts:7 // export class Arc4EncodeDecode extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/arc4-encode-decode.algo.ts:7 + // export class Arc4EncodeDecode extends Contract { txna ApplicationArgs 0 pushbytes 0x9be85afa // method "testEncoding(uint64,bool,uint512,byte[],string)void" pushbytes 0xa2d335ac // method "testDecoding(uint64,byte[],bool,byte[],uint512,byte[],string,byte[],(uint64,byte[]),byte[])void" uncover 2 - match __puya_arc4_router___testEncoding_route@2 __puya_arc4_router___testDecoding_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_testEncoding_route@3 main_testDecoding_route@4 -__puya_arc4_router___testEncoding_route@2: - // tests/approvals/arc4-encode-decode.algo.ts:8 - // testEncoding(a: uint64, b: boolean, c: biguint, d: bytes, e: string) { - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: // tests/approvals/arc4-encode-decode.algo.ts:7 // export class Arc4EncodeDecode extends Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 intc_0 // 0 - getbit - txna ApplicationArgs 3 - txna ApplicationArgs 4 - extract 2 0 - txna ApplicationArgs 5 - extract 2 0 - // tests/approvals/arc4-encode-decode.algo.ts:8 - // testEncoding(a: uint64, b: boolean, c: biguint, d: bytes, e: string) { - uncover 4 - uncover 4 - uncover 4 - uncover 4 - uncover 4 - callsub testEncoding - intc_1 // 1 - retsub -__puya_arc4_router___testDecoding_route@3: +main_after_inlined_tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__@12: + return + +main_testDecoding_route@4: // tests/approvals/arc4-encode-decode.algo.ts:17-28 // testDecoding( // a: uint64, @@ -100,11 +78,11 @@ __puya_arc4_router___testDecoding_route@3: txna ApplicationArgs 9 dup intc_0 // 0 - intc_2 // 8 + intc_1 // 8 extract3 // on error: Index access is out of bounds swap dup - intc_2 // 8 + intc_1 // 8 extract_uint16 swap dup @@ -140,22 +118,57 @@ __puya_arc4_router___testDecoding_route@3: uncover 10 uncover 10 callsub testDecoding - intc_1 // 1 - retsub + intc_2 // 1 + b main_after_inlined_tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__@12 -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 +main_testEncoding_route@3: + // tests/approvals/arc4-encode-decode.algo.ts:8 + // testEncoding(a: uint64, b: boolean, c: biguint, d: bytes, e: string) { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + // tests/approvals/arc4-encode-decode.algo.ts:7 + // export class Arc4EncodeDecode extends Contract { + txna ApplicationArgs 1 + btoi + txna ApplicationArgs 2 + intc_0 // 0 + getbit + txna ApplicationArgs 3 + txna ApplicationArgs 4 + extract 2 0 + txna ApplicationArgs 5 + extract 2 0 + // tests/approvals/arc4-encode-decode.algo.ts:8 + // testEncoding(a: uint64, b: boolean, c: biguint, d: bytes, e: string) { + uncover 4 + uncover 4 + uncover 4 + uncover 4 + uncover 4 + callsub testEncoding + intc_2 // 1 + b main_after_inlined_tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/arc4-encode-decode.algo.ts:7 // export class Arc4EncodeDecode extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/arc4-encode-decode.algo.ts:7 // export class Arc4EncodeDecode extends Contract { txn ApplicationID @@ -163,16 +176,8 @@ __puya_arc4_router_____algots__.defaultCreate@7: == assert // can only call when creating callsub __algots__.defaultCreate - intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/arc4-encode-decode.algo.ts:7 - // export class Arc4EncodeDecode extends Contract { - intc_0 // 0 - retsub + intc_2 // 1 + b main_after_inlined_tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__@12 // tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testEncoding(a: uint64, b: uint64, c: bytes, d: bytes, e: bytes) -> void: @@ -345,13 +350,17 @@ testDecoding: // assertMatch(decodeArc4(e_bytes), e) frame_dig -1 intc_0 // 0 - intc_2 // 8 + intc_1 // 8 extract3 // on error: Index access is out of bounds frame_dig -3 == bz testDecoding_bool_false@3 + +testDecoding_and_contd@1: + // tests/approvals/arc4-encode-decode.algo.ts:34 + // assertMatch(decodeArc4(e_bytes), e) frame_dig -1 - intc_2 // 8 + intc_1 // 8 extract_uint16 frame_dig -1 len @@ -362,11 +371,9 @@ testDecoding: frame_dig -2 == bz testDecoding_bool_false@3 - intc_1 // 1 - b testDecoding_bool_merge@4 -testDecoding_bool_false@3: - intc_0 // 0 +testDecoding_bool_true@2: + intc_2 // 1 testDecoding_bool_merge@4: // tests/approvals/arc4-encode-decode.algo.ts:34 @@ -374,6 +381,10 @@ testDecoding_bool_merge@4: assert // assert target is match for conditions retsub +testDecoding_bool_false@3: + intc_0 // 0 + b testDecoding_bool_merge@4 + // tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__algots__.defaultCreate() -> void: __algots__.defaultCreate: diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc32.json b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc32.json index 8dc88ca1..b57ed0d1 100644 --- a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc32.json +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc32.json @@ -27,8 +27,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMSA4IDY0CiAgICBieXRlY2Jsb2NrIDB4MDAgMHgKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg5YmU4NWFmYSAvLyBtZXRob2QgInRlc3RFbmNvZGluZyh1aW50NjQsYm9vbCx1aW50NTEyLGJ5dGVbXSxzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweGEyZDMzNWFjIC8vIG1ldGhvZCAidGVzdERlY29kaW5nKHVpbnQ2NCxieXRlW10sYm9vbCxieXRlW10sdWludDUxMixieXRlW10sc3RyaW5nLGJ5dGVbXSwodWludDY0LGJ5dGVbXSksYnl0ZVtdKXZvaWQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RFbmNvZGluZ19yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3REZWNvZGluZ19yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdEVuY29kaW5nX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNhbGxzdWIgdGVzdEVuY29kaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0RGVjb2Rpbmdfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxNy0yOAogICAgLy8gdGVzdERlY29kaW5nKAogICAgLy8gICBhOiB1aW50NjQsCiAgICAvLyAgIGFfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBiOiBib29sZWFuLAogICAgLy8gICBiX2J5dGVzOiBieXRlcywKICAgIC8vICAgYzogYmlndWludCwKICAgIC8vICAgY19ieXRlczogYnl0ZXMsCiAgICAvLyAgIGQ6IHN0cmluZywKICAgIC8vICAgZF9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGU6IFRlc3RPYmosCiAgICAvLyAgIGVfYnl0ZXM6IGJ5dGVzLAogICAgLy8gKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIGR1cAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIGNhbGxzdWIgdGVzdERlY29kaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0RW5jb2Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgcHJvdG8gNSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYSkgPT09IG5ldyBVaW50TjY0KGEpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC01CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYikgPT09IG5ldyBCb29sKGIpLmJ5dGVzKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC00CiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtNAogICAgc2V0Yml0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGMpID09PSBuZXcgVWludE48NTEyPihjKS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoZCkgPT09IG5ldyBEeW5hbWljQnl0ZXMoZCkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGUpID09PSBuZXcgU3RyKGUpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoZW5jb2RlQXJjNCh7IGEsIGI6IGQgfSkgPT09IG5ldyBUZXN0U3RydWN0KHsgYTogbmV3IFVpbnRONjQoYSksIGI6IG5ldyBEeW5hbWljQnl0ZXMoZCkgfSkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdERlY29kaW5nKGE6IHVpbnQ2NCwgYV9ieXRlczogYnl0ZXMsIGI6IHVpbnQ2NCwgYl9ieXRlczogYnl0ZXMsIGM6IGJ5dGVzLCBjX2J5dGVzOiBieXRlcywgZDogYnl0ZXMsIGRfYnl0ZXM6IGJ5dGVzLCBlLmE6IGJ5dGVzLCBlLmI6IGJ5dGVzLCBlX2J5dGVzOiBieXRlcykgLT4gdm9pZDoKdGVzdERlY29kaW5nOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDExIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8dWludDY0PihhX2J5dGVzKSA9PT0gYSkKICAgIGZyYW1lX2RpZyAtMTAKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozMAogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8Ym9vbGVhbj4oYl9ieXRlcykgPT09IGIpCiAgICBmcmFtZV9kaWcgLTgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyAtOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxiaWd1aW50PihjX2J5dGVzKSA9PT0gYykKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC03CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxzdHJpbmc+KGRfYnl0ZXMpID09PSBkKQogICAgZnJhbWVfZGlnIC00CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiB0ZXN0RGVjb2RpbmdfYm9vbF9mYWxzZUAzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IHRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3REZWNvZGluZ19ib29sX21lcmdlQDQKCnRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAoKdGVzdERlY29kaW5nX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozNAogICAgLy8gYXNzZXJ0TWF0Y2goZGVjb2RlQXJjNDxUZXN0T2JqPihlX2J5dGVzKSwgZSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgNjQKICAgIGJ5dGVjYmxvY2sgMHgwMCAweAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4OWJlODVhZmEgLy8gbWV0aG9kICJ0ZXN0RW5jb2RpbmcodWludDY0LGJvb2wsdWludDUxMixieXRlW10sc3RyaW5nKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMmQzMzVhYyAvLyBtZXRob2QgInRlc3REZWNvZGluZyh1aW50NjQsYnl0ZVtdLGJvb2wsYnl0ZVtdLHVpbnQ1MTIsYnl0ZVtdLHN0cmluZyxieXRlW10sKHVpbnQ2NCxieXRlW10pLGJ5dGVbXSl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3RFbmNvZGluZ19yb3V0ZUAzIG1haW5fdGVzdERlY29kaW5nX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl90ZXN0RGVjb2Rpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxNy0yOAogICAgLy8gdGVzdERlY29kaW5nKAogICAgLy8gICBhOiB1aW50NjQsCiAgICAvLyAgIGFfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBiOiBib29sZWFuLAogICAgLy8gICBiX2J5dGVzOiBieXRlcywKICAgIC8vICAgYzogYmlndWludCwKICAgIC8vICAgY19ieXRlczogYnl0ZXMsCiAgICAvLyAgIGQ6IHN0cmluZywKICAgIC8vICAgZF9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGU6IFRlc3RPYmosCiAgICAvLyAgIGVfYnl0ZXM6IGJ5dGVzLAogICAgLy8gKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIGNhbGxzdWIgdGVzdERlY29kaW5nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjpBcmM0RW5jb2RlRGVjb2RlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3Rlc3RFbmNvZGluZ19yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjgKICAgIC8vIHRlc3RFbmNvZGluZyhhOiB1aW50NjQsIGI6IGJvb2xlYW4sIGM6IGJpZ3VpbnQsIGQ6IGJ5dGVzLCBlOiBzdHJpbmcpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjgKICAgIC8vIHRlc3RFbmNvZGluZyhhOiB1aW50NjQsIGI6IGJvb2xlYW4sIGM6IGJpZ3VpbnQsIGQ6IGJ5dGVzLCBlOiBzdHJpbmcpIHsKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHRlc3RFbmNvZGluZwogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0RW5jb2Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgcHJvdG8gNSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYSkgPT09IG5ldyBVaW50TjY0KGEpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC01CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYikgPT09IG5ldyBCb29sKGIpLmJ5dGVzKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC00CiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtNAogICAgc2V0Yml0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGMpID09PSBuZXcgVWludE48NTEyPihjKS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoZCkgPT09IG5ldyBEeW5hbWljQnl0ZXMoZCkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGUpID09PSBuZXcgU3RyKGUpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoZW5jb2RlQXJjNCh7IGEsIGI6IGQgfSkgPT09IG5ldyBUZXN0U3RydWN0KHsgYTogbmV3IFVpbnRONjQoYSksIGI6IG5ldyBEeW5hbWljQnl0ZXMoZCkgfSkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdERlY29kaW5nKGE6IHVpbnQ2NCwgYV9ieXRlczogYnl0ZXMsIGI6IHVpbnQ2NCwgYl9ieXRlczogYnl0ZXMsIGM6IGJ5dGVzLCBjX2J5dGVzOiBieXRlcywgZDogYnl0ZXMsIGRfYnl0ZXM6IGJ5dGVzLCBlLmE6IGJ5dGVzLCBlLmI6IGJ5dGVzLCBlX2J5dGVzOiBieXRlcykgLT4gdm9pZDoKdGVzdERlY29kaW5nOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDExIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8dWludDY0PihhX2J5dGVzKSA9PT0gYSkKICAgIGZyYW1lX2RpZyAtMTAKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozMAogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8Ym9vbGVhbj4oYl9ieXRlcykgPT09IGIpCiAgICBmcmFtZV9kaWcgLTgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyAtOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxiaWd1aW50PihjX2J5dGVzKSA9PT0gYykKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC03CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxzdHJpbmc+KGRfYnl0ZXMpID09PSBkKQogICAgZnJhbWVfZGlnIC00CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiB0ZXN0RGVjb2RpbmdfYm9vbF9mYWxzZUAzCgp0ZXN0RGVjb2RpbmdfYW5kX2NvbnRkQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IHRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDMKCnRlc3REZWNvZGluZ19ib29sX3RydWVAMjoKICAgIGludGNfMiAvLyAxCgp0ZXN0RGVjb2RpbmdfYm9vbF9tZXJnZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjM0CiAgICAvLyBhc3NlcnRNYXRjaChkZWNvZGVBcmM0PFRlc3RPYmo+KGVfYnl0ZXMpLCBlKQogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIHJldHN1YgoKdGVzdERlY29kaW5nX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIHRlc3REZWNvZGluZ19ib29sX21lcmdlQDQKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc56.json b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc56.json index 6a8b59d4..a313b2fe 100644 --- a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc56.json +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.arc56.json @@ -147,41 +147,41 @@ "sourceInfo": [ { "pc": [ - 159, - 415 + 102, + 408 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ - 56, - 105 + 48, + 155 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 447 + 436 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ - 224 + 217 ], "errorMessage": "can only call when creating" }, { "pc": [ - 61, - 110 + 53, + 160 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 260, - 271 + 253, + 264 ], "errorMessage": "overflow" } @@ -194,8 +194,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMSA4IDY0CiAgICBieXRlY2Jsb2NrIDB4MDAgMHgKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg5YmU4NWFmYSAvLyBtZXRob2QgInRlc3RFbmNvZGluZyh1aW50NjQsYm9vbCx1aW50NTEyLGJ5dGVbXSxzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweGEyZDMzNWFjIC8vIG1ldGhvZCAidGVzdERlY29kaW5nKHVpbnQ2NCxieXRlW10sYm9vbCxieXRlW10sdWludDUxMixieXRlW10sc3RyaW5nLGJ5dGVbXSwodWludDY0LGJ5dGVbXSksYnl0ZVtdKXZvaWQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RFbmNvZGluZ19yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3REZWNvZGluZ19yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdEVuY29kaW5nX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNhbGxzdWIgdGVzdEVuY29kaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0RGVjb2Rpbmdfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxNy0yOAogICAgLy8gdGVzdERlY29kaW5nKAogICAgLy8gICBhOiB1aW50NjQsCiAgICAvLyAgIGFfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBiOiBib29sZWFuLAogICAgLy8gICBiX2J5dGVzOiBieXRlcywKICAgIC8vICAgYzogYmlndWludCwKICAgIC8vICAgY19ieXRlczogYnl0ZXMsCiAgICAvLyAgIGQ6IHN0cmluZywKICAgIC8vICAgZF9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGU6IFRlc3RPYmosCiAgICAvLyAgIGVfYnl0ZXM6IGJ5dGVzLAogICAgLy8gKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIGR1cAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIGNhbGxzdWIgdGVzdERlY29kaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0RW5jb2Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgcHJvdG8gNSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYSkgPT09IG5ldyBVaW50TjY0KGEpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC01CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYikgPT09IG5ldyBCb29sKGIpLmJ5dGVzKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC00CiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtNAogICAgc2V0Yml0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGMpID09PSBuZXcgVWludE48NTEyPihjKS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoZCkgPT09IG5ldyBEeW5hbWljQnl0ZXMoZCkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGUpID09PSBuZXcgU3RyKGUpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoZW5jb2RlQXJjNCh7IGEsIGI6IGQgfSkgPT09IG5ldyBUZXN0U3RydWN0KHsgYTogbmV3IFVpbnRONjQoYSksIGI6IG5ldyBEeW5hbWljQnl0ZXMoZCkgfSkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdERlY29kaW5nKGE6IHVpbnQ2NCwgYV9ieXRlczogYnl0ZXMsIGI6IHVpbnQ2NCwgYl9ieXRlczogYnl0ZXMsIGM6IGJ5dGVzLCBjX2J5dGVzOiBieXRlcywgZDogYnl0ZXMsIGRfYnl0ZXM6IGJ5dGVzLCBlLmE6IGJ5dGVzLCBlLmI6IGJ5dGVzLCBlX2J5dGVzOiBieXRlcykgLT4gdm9pZDoKdGVzdERlY29kaW5nOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDExIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8dWludDY0PihhX2J5dGVzKSA9PT0gYSkKICAgIGZyYW1lX2RpZyAtMTAKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozMAogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8Ym9vbGVhbj4oYl9ieXRlcykgPT09IGIpCiAgICBmcmFtZV9kaWcgLTgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyAtOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxiaWd1aW50PihjX2J5dGVzKSA9PT0gYykKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC03CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxzdHJpbmc+KGRfYnl0ZXMpID09PSBkKQogICAgZnJhbWVfZGlnIC00CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiB0ZXN0RGVjb2RpbmdfYm9vbF9mYWxzZUAzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IHRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3REZWNvZGluZ19ib29sX21lcmdlQDQKCnRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAoKdGVzdERlY29kaW5nX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozNAogICAgLy8gYXNzZXJ0TWF0Y2goZGVjb2RlQXJjNDxUZXN0T2JqPihlX2J5dGVzKSwgZSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgNjQKICAgIGJ5dGVjYmxvY2sgMHgwMCAweAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4OWJlODVhZmEgLy8gbWV0aG9kICJ0ZXN0RW5jb2RpbmcodWludDY0LGJvb2wsdWludDUxMixieXRlW10sc3RyaW5nKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMmQzMzVhYyAvLyBtZXRob2QgInRlc3REZWNvZGluZyh1aW50NjQsYnl0ZVtdLGJvb2wsYnl0ZVtdLHVpbnQ1MTIsYnl0ZVtdLHN0cmluZyxieXRlW10sKHVpbnQ2NCxieXRlW10pLGJ5dGVbXSl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3RFbmNvZGluZ19yb3V0ZUAzIG1haW5fdGVzdERlY29kaW5nX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl90ZXN0RGVjb2Rpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxNy0yOAogICAgLy8gdGVzdERlY29kaW5nKAogICAgLy8gICBhOiB1aW50NjQsCiAgICAvLyAgIGFfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBiOiBib29sZWFuLAogICAgLy8gICBiX2J5dGVzOiBieXRlcywKICAgIC8vICAgYzogYmlndWludCwKICAgIC8vICAgY19ieXRlczogYnl0ZXMsCiAgICAvLyAgIGQ6IHN0cmluZywKICAgIC8vICAgZF9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGU6IFRlc3RPYmosCiAgICAvLyAgIGVfYnl0ZXM6IGJ5dGVzLAogICAgLy8gKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRFbmNvZGVEZWNvZGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIHVuY292ZXIgMTAKICAgIGNhbGxzdWIgdGVzdERlY29kaW5nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjpBcmM0RW5jb2RlRGVjb2RlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3Rlc3RFbmNvZGluZ19yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjgKICAgIC8vIHRlc3RFbmNvZGluZyhhOiB1aW50NjQsIGI6IGJvb2xlYW4sIGM6IGJpZ3VpbnQsIGQ6IGJ5dGVzLCBlOiBzdHJpbmcpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjgKICAgIC8vIHRlc3RFbmNvZGluZyhhOiB1aW50NjQsIGI6IGJvb2xlYW4sIGM6IGJpZ3VpbnQsIGQ6IGJ5dGVzLCBlOiBzdHJpbmcpIHsKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHRlc3RFbmNvZGluZwogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo6QXJjNEVuY29kZURlY29kZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNEVuY29kZURlY29kZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0RW5jb2Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OAogICAgLy8gdGVzdEVuY29kaW5nKGE6IHVpbnQ2NCwgYjogYm9vbGVhbiwgYzogYmlndWludCwgZDogYnl0ZXMsIGU6IHN0cmluZykgewogICAgcHJvdG8gNSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYSkgPT09IG5ldyBVaW50TjY0KGEpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC01CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoYikgPT09IG5ldyBCb29sKGIpLmJ5dGVzKQogICAgYnl0ZWNfMCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC00CiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2RpZyAtNAogICAgc2V0Yml0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGMpID09PSBuZXcgVWludE48NTEyPihjKS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzMgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMyAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMwogICAgYnwKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KGVuY29kZUFyYzQoZCkgPT09IG5ldyBEeW5hbWljQnl0ZXMoZCkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChlbmNvZGVBcmM0KGUpID09PSBuZXcgU3RyKGUpLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoZW5jb2RlQXJjNCh7IGEsIGI6IGQgfSkgPT09IG5ldyBUZXN0U3RydWN0KHsgYTogbmV3IFVpbnRONjQoYSksIGI6IG5ldyBEeW5hbWljQnl0ZXMoZCkgfSkuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUudGVzdERlY29kaW5nKGE6IHVpbnQ2NCwgYV9ieXRlczogYnl0ZXMsIGI6IHVpbnQ2NCwgYl9ieXRlczogYnl0ZXMsIGM6IGJ5dGVzLCBjX2J5dGVzOiBieXRlcywgZDogYnl0ZXMsIGRfYnl0ZXM6IGJ5dGVzLCBlLmE6IGJ5dGVzLCBlLmI6IGJ5dGVzLCBlX2J5dGVzOiBieXRlcykgLT4gdm9pZDoKdGVzdERlY29kaW5nOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjE3LTI4CiAgICAvLyB0ZXN0RGVjb2RpbmcoCiAgICAvLyAgIGE6IHVpbnQ2NCwKICAgIC8vICAgYV9ieXRlczogYnl0ZXMsCiAgICAvLyAgIGI6IGJvb2xlYW4sCiAgICAvLyAgIGJfYnl0ZXM6IGJ5dGVzLAogICAgLy8gICBjOiBiaWd1aW50LAogICAgLy8gICBjX2J5dGVzOiBieXRlcywKICAgIC8vICAgZDogc3RyaW5nLAogICAgLy8gICBkX2J5dGVzOiBieXRlcywKICAgIC8vICAgZTogVGVzdE9iaiwKICAgIC8vICAgZV9ieXRlczogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDExIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8dWludDY0PihhX2J5dGVzKSA9PT0gYSkKICAgIGZyYW1lX2RpZyAtMTAKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LWVuY29kZS1kZWNvZGUuYWxnby50czozMAogICAgLy8gYXNzZXJ0KGRlY29kZUFyYzQ8Ym9vbGVhbj4oYl9ieXRlcykgPT09IGIpCiAgICBmcmFtZV9kaWcgLTgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGZyYW1lX2RpZyAtOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxiaWd1aW50PihjX2J5dGVzKSA9PT0gYykKICAgIGZyYW1lX2RpZyAtNgogICAgZnJhbWVfZGlnIC03CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoZGVjb2RlQXJjNDxzdHJpbmc+KGRfYnl0ZXMpID09PSBkKQogICAgZnJhbWVfZGlnIC00CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiB0ZXN0RGVjb2RpbmdfYm9vbF9mYWxzZUAzCgp0ZXN0RGVjb2RpbmdfYW5kX2NvbnRkQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6MzQKICAgIC8vIGFzc2VydE1hdGNoKGRlY29kZUFyYzQ8VGVzdE9iaj4oZV9ieXRlcyksIGUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IHRlc3REZWNvZGluZ19ib29sX2ZhbHNlQDMKCnRlc3REZWNvZGluZ19ib29sX3RydWVAMjoKICAgIGludGNfMiAvLyAxCgp0ZXN0RGVjb2RpbmdfYm9vbF9tZXJnZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjM0CiAgICAvLyBhc3NlcnRNYXRjaChkZWNvZGVBcmM0PFRlc3RPYmo+KGVfYnl0ZXMpLCBlKQogICAgYXNzZXJ0IC8vIGFzc2VydCB0YXJnZXQgaXMgbWF0Y2ggZm9yIGNvbmRpdGlvbnMKICAgIHJldHN1YgoKdGVzdERlY29kaW5nX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIHRlc3REZWNvZGluZ19ib29sX21lcmdlQDQKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1lbmNvZGUtZGVjb2RlLmFsZ28udHM6OkFyYzRFbmNvZGVEZWNvZGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtZW5jb2RlLWRlY29kZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0RW5jb2RlRGVjb2RlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiAEAAgBQCYCAQAAMRsiE0EAtzYaAIAEm+ha+oAEotM1rE8CjgIAbQACIkMxGSISRDEYIhNENhoBFzYaAlcCADYaAyJTNhoEVwIANhoFNhoGVwIANhoHVwIANhoIVwIANhoJSSIjWExJI1lMSRVMTwJPAlI2GgpXAgBPCk8KTwpPCk8KTwpPCk8KTwpPCk8KiADgJEL/lDEZIhJEMRgiE0Q2GgEXNhoCIlM2GgM2GgRXAgA2GgVXAgBPBE8ETwRPBE8EiAAbJEL/YTEZIkyOAQADQv9VMRgiEkSIAN0kQv9KigUAi/sWi/sWEkQoIov8VCgii/xUEkSL/RUlDkQlr4v9q4v9FSUORCWvi/2rEkSL/hUWVwYCi/5Qi/4VFlcGAov+UBJEi/8VFlcGAov/UIv/FRZXBgKL/1ASRIv7Fov+FRZXBgKL/lBMKUxQgQoWVwYCUExQi/sWi/4VFlcGAov+UEwpTFCBChZXBgJQTFASRImKCwCL9heL9RJEi/giU4v3EkSL+ov5qESL/FcCAIv7EkSL/yIjWIv9EkEAF4v/I1mL/xWL/08CTwJSi/4SQQADJESJIkL/+ooAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.clear.teal b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.clear.teal index b7e3aa30..a4d58047 100644 --- a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.clear.teal +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.approval.0.ssa.ir b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.approval.0.ssa.ir new file mode 100644 index 00000000..851fdbfa --- /dev/null +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.approval.0.ssa.ir @@ -0,0 +1,201 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__() -> bool: + block@0: // L7 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L7 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "testEncoding(uint64,bool,uint512,byte[],string)void" => block@2, method "testDecoding(uint64,byte[],bool,byte[],uint512,byte[],string,byte[],(uint64,byte[]),byte[])void" => block@3, * => block@4} + block@2: // testEncoding_route_L8 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + let tmp%9#0: bytes = (txna ApplicationArgs 2) + let tmp%10#0: bool = (getbit tmp%9#0 0u) + let tmp%11#0: bytes = (txna ApplicationArgs 3) + let tmp%12#0: bytes = (txna ApplicationArgs 4) + let tmp%13#0: bytes = ((extract 2 0) tmp%12#0) + let tmp%14#0: bytes = (txna ApplicationArgs 5) + let tmp%15#0: bytes = ((extract 2 0) tmp%14#0) + tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testEncoding(tmp%8#0, tmp%10#0, tmp%11#0, tmp%13#0, tmp%15#0) + return 1u + block@3: // testDecoding_route_L17 + let tmp%16#0: uint64 = (txn OnCompletion) + let tmp%17#0: bool = (== tmp%16#0 NoOp) + (assert tmp%17#0) // OnCompletion is not NoOp + let tmp%18#0: uint64 = (txn ApplicationID) + let tmp%19#0: bool = (!= tmp%18#0 0u) + (assert tmp%19#0) // can only call when not creating + let tmp%20#0: bytes = (txna ApplicationArgs 1) + let tmp%21#0: uint64 = (btoi tmp%20#0) + let tmp%22#0: bytes = (txna ApplicationArgs 2) + let tmp%23#0: bytes = ((extract 2 0) tmp%22#0) + let tmp%24#0: bytes = (txna ApplicationArgs 3) + let tmp%25#0: bool = (getbit tmp%24#0 0u) + let tmp%26#0: bytes = (txna ApplicationArgs 4) + let tmp%27#0: bytes = ((extract 2 0) tmp%26#0) + let tmp%28#0: bytes = (txna ApplicationArgs 5) + let tmp%29#0: bytes = (txna ApplicationArgs 6) + let tmp%30#0: bytes = ((extract 2 0) tmp%29#0) + let tmp%31#0: bytes = (txna ApplicationArgs 7) + let tmp%32#0: bytes = ((extract 2 0) tmp%31#0) + let tmp%33#0: bytes = (txna ApplicationArgs 8) + let tmp%34#0: bytes = ((extract 2 0) tmp%33#0) + let tmp%35#0: bytes = (txna ApplicationArgs 9) + let item0%0#0: bytes = (extract3 tmp%35#0 0u 8u) // on error: Index access is out of bounds + let item_start_offset%0#0: uint64 = (extract_uint16 tmp%35#0 8u) + let item_end_offset%0#0: uint64 = (len tmp%35#0) + let item1%0#0: bytes = (substring3 tmp%35#0 item_start_offset%0#0 item_end_offset%0#0) + let tmp%36#0: bytes = (txna ApplicationArgs 10) + let tmp%37#0: bytes = ((extract 2 0) tmp%36#0) + tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testDecoding(tmp%21#0, tmp%23#0, tmp%25#0, tmp%27#0, tmp%28#0, tmp%30#0, tmp%32#0, tmp%34#0, item0%0#0, item1%0#0, tmp%37#0) + return 1u + block@4: // switch_case_default_L7 + goto block@5 + block@5: // switch_case_next_L7 + goto block@10 + block@6: // bare_routing_L7 + let tmp%38#0: uint64 = (txn OnCompletion) + switch tmp%38#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L7 + let tmp%39#0: uint64 = (txn ApplicationID) + let tmp%40#0: bool = (== tmp%39#0 0u) + (assert tmp%40#0) // can only call when creating + tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L7 + goto block@9 + block@9: // switch_case_next_L7 + goto block@10 + block@10: // after_if_else_L7 + return 0u + +subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testEncoding(a: uint64, b: bool, c: biguint, d: bytes, e: bytes) -> void: + block@0: // L8 + let val_as_bytes%0#0: bytes = (itob a#0) + let val_as_bytes%1#0: bytes = (itob a#0) + let tmp%0#0: bool = (== val_as_bytes%0#0 val_as_bytes%1#0) + (assert tmp%0#0) + let encoded_bool%0#0: bytes = (setbit 0x00 0u b#0) + let encoded_bool%1#0: bytes = (setbit 0x00 0u b#0) + let tmp%1#0: bool = (== encoded_bool%0#0 encoded_bool%1#0) + (assert tmp%1#0) + let len_%0#0: uint64 = (len c#0) + let no_overflow%0#0: bool = (<= len_%0#0 64u) + (assert no_overflow%0#0) // overflow + let b_zeros%0#0: bytes = (bzero 64u) + let tmp%2#0: bytes = (b| c#0 b_zeros%0#0) + let len_%1#0: uint64 = (len c#0) + let no_overflow%1#0: bool = (<= len_%1#0 64u) + (assert no_overflow%1#0) // overflow + let b_zeros%1#0: bytes = (bzero 64u) + let tmp%3#0: bytes = (b| c#0 b_zeros%1#0) + let tmp%4#0: bool = (== tmp%2#0 tmp%3#0) + (assert tmp%4#0) + let length%0#0: uint64 = (len d#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 d#0) + let length%1#0: uint64 = (len d#0) + let as_bytes%1#0: bytes = (itob length%1#0) + let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 d#0) + let tmp%5#0: bool = (== encoded_value%0#0 encoded_value%1#0) + (assert tmp%5#0) + let length%2#0: uint64 = (len e#0) + let as_bytes%2#0: bytes = (itob length%2#0) + let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let encoded_value%2#0: bytes = (concat length_uint16%2#0 e#0) + let length%3#0: uint64 = (len e#0) + let as_bytes%3#0: bytes = (itob length%3#0) + let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let encoded_value%3#0: bytes = (concat length_uint16%3#0 e#0) + let tmp%6#0: bool = (== encoded_value%2#0 encoded_value%3#0) + (assert tmp%6#0) + let val_as_bytes%2#0: bytes = (itob a#0) + let length%4#0: uint64 = (len d#0) + let as_bytes%4#0: bytes = (itob length%4#0) + let length_uint16%4#0: bytes = ((extract 6 2) as_bytes%4#0) + let encoded_value%4#0: bytes = (concat length_uint16%4#0 d#0) + let current_tail_offset%0#0: uint64 = 10u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%2#0) + let as_bytes%5#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%5#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%4#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 encoded_value%4#0) + let val_as_bytes%3#0: bytes = (itob a#0) + let length%5#0: uint64 = (len d#0) + let as_bytes%6#0: bytes = (itob length%5#0) + let length_uint16%5#0: bytes = ((extract 6 2) as_bytes%6#0) + let encoded_value%5#0: bytes = (concat length_uint16%5#0 d#0) + let val_as_bytes%4#0: bytes = (itob a#0) + let length%6#0: uint64 = (len d#0) + let as_bytes%7#0: bytes = (itob length%6#0) + let length_uint16%6#0: bytes = ((extract 6 2) as_bytes%7#0) + let encoded_value%6#0: bytes = (concat length_uint16%6#0 d#0) + let current_tail_offset%2#0: uint64 = 10u + let encoded_tuple_buffer%4#0: bytes = 0x + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) + let as_bytes%8#0: bytes = (itob current_tail_offset%2#0) + let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%8#0) + let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 offset_as_uint16%1#0) + let data_length%1#0: uint64 = (len encoded_value%6#0) + let current_tail_offset%3#0: uint64 = (+ current_tail_offset%2#0 data_length%1#0) + let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 encoded_value%6#0) + let tmp%7#0: bool = (== encoded_tuple_buffer%3#0 encoded_tuple_buffer%7#0) + (assert tmp%7#0) + return + +subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testDecoding(a: uint64, a_bytes: bytes, b: bool, b_bytes: bytes, c: biguint, c_bytes: bytes, d: bytes, d_bytes: bytes, e.a: bytes, e.b: bytes, e_bytes: bytes) -> void: + block@0: // L17 + let tmp%0#0: uint64 = (btoi a_bytes#0) + let tmp%1#0: bool = (== tmp%0#0 a#0) + (assert tmp%1#0) + let tmp%2#0: bool = (getbit b_bytes#0 0u) + let tmp%3#0: bool = (== tmp%2#0 b#0) + (assert tmp%3#0) + let tmp%4#0: bool = (b== c_bytes#0 c#0) + (assert tmp%4#0) + let tmp%5#0: bytes = ((extract 2 0) d_bytes#0) + let tmp%6#0: bool = (== tmp%5#0 d#0) + (assert tmp%6#0) + let item0%0#0: bytes = (extract3 e_bytes#0 0u 8u) // on error: Index access is out of bounds + let item_start_offset%0#0: uint64 = (extract_uint16 e_bytes#0 8u) + let item_end_offset%0#0: uint64 = (len e_bytes#0) + let item1%0#0: bytes = (substring3 e_bytes#0 item_start_offset%0#0 item_end_offset%0#0) + let tmp%7#0: bool = (== item0%0#0 e.a#0) + goto tmp%7#0 ? block@1 : block@3 + block@1: // and_contd_L34 + let item0%1#0: bytes = (extract3 e_bytes#0 0u 8u) // on error: Index access is out of bounds + let item_start_offset%1#0: uint64 = (extract_uint16 e_bytes#0 8u) + let item_end_offset%1#0: uint64 = (len e_bytes#0) + let item1%1#0: bytes = (substring3 e_bytes#0 item_start_offset%1#0 item_end_offset%1#0) + let tmp%8#0: bool = (== item1%1#0 e.b#0) + goto tmp%8#0 ? block@2 : block@3 + block@2: // bool_true_L34 + let and_result%0#0: bool = 1u + goto block@4 + block@3: // bool_false_L34 + let and_result%0#1: bool = 0u + goto block@4 + block@4: // bool_merge_L34 + let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) + (assert and_result%0#2) // assert target is match for conditions + return + +subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__algots__.defaultCreate() -> void: + block@0: // L7 + return \ No newline at end of file diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.clear.0.ssa.ir b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ir/Arc4EncodeDecode.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ssa.ir b/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ssa.ir deleted file mode 100644 index 44369b9e..00000000 --- a/tests/approvals/out/arc4-encode-decode/Arc4EncodeDecode.ssa.ir +++ /dev/null @@ -1,208 +0,0 @@ -contract tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__puya_arc4_router__() -> bool: - block@0: // L7 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L7 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "testEncoding(uint64,bool,uint512,byte[],string)void" => block@2, method "testDecoding(uint64,byte[],bool,byte[],uint512,byte[],string,byte[],(uint64,byte[]),byte[])void" => block@3, * => block@4} - block@2: // testEncoding_route_L8 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - let tmp%9#0: bytes = (txna ApplicationArgs 2) - let tmp%10#0: bool = (getbit tmp%9#0 0u) - let tmp%11#0: bytes = (txna ApplicationArgs 3) - let tmp%12#0: bytes = (txna ApplicationArgs 4) - let tmp%13#0: bytes = ((extract 2 0) tmp%12#0) - let tmp%14#0: bytes = (txna ApplicationArgs 5) - let tmp%15#0: bytes = ((extract 2 0) tmp%14#0) - tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testEncoding(tmp%8#0, tmp%10#0, tmp%11#0, tmp%13#0, tmp%15#0) - return 1u - block@3: // testDecoding_route_L17 - let tmp%16#0: uint64 = (txn OnCompletion) - let tmp%17#0: bool = (== tmp%16#0 NoOp) - (assert tmp%17#0) // OnCompletion is not NoOp - let tmp%18#0: uint64 = (txn ApplicationID) - let tmp%19#0: bool = (!= tmp%18#0 0u) - (assert tmp%19#0) // can only call when not creating - let tmp%20#0: bytes = (txna ApplicationArgs 1) - let tmp%21#0: uint64 = (btoi tmp%20#0) - let tmp%22#0: bytes = (txna ApplicationArgs 2) - let tmp%23#0: bytes = ((extract 2 0) tmp%22#0) - let tmp%24#0: bytes = (txna ApplicationArgs 3) - let tmp%25#0: bool = (getbit tmp%24#0 0u) - let tmp%26#0: bytes = (txna ApplicationArgs 4) - let tmp%27#0: bytes = ((extract 2 0) tmp%26#0) - let tmp%28#0: bytes = (txna ApplicationArgs 5) - let tmp%29#0: bytes = (txna ApplicationArgs 6) - let tmp%30#0: bytes = ((extract 2 0) tmp%29#0) - let tmp%31#0: bytes = (txna ApplicationArgs 7) - let tmp%32#0: bytes = ((extract 2 0) tmp%31#0) - let tmp%33#0: bytes = (txna ApplicationArgs 8) - let tmp%34#0: bytes = ((extract 2 0) tmp%33#0) - let tmp%35#0: bytes = (txna ApplicationArgs 9) - let item0%0#0: bytes = (extract3 tmp%35#0 0u 8u) // on error: Index access is out of bounds - let item_start_offset%0#0: uint64 = (extract_uint16 tmp%35#0 8u) - let item_end_offset%0#0: uint64 = (len tmp%35#0) - let item1%0#0: bytes = (substring3 tmp%35#0 item_start_offset%0#0 item_end_offset%0#0) - let tmp%36#0: bytes = (txna ApplicationArgs 10) - let tmp%37#0: bytes = ((extract 2 0) tmp%36#0) - tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testDecoding(tmp%21#0, tmp%23#0, tmp%25#0, tmp%27#0, tmp%28#0, tmp%30#0, tmp%32#0, tmp%34#0, item0%0#0, item1%0#0, tmp%37#0) - return 1u - block@4: // switch_case_default_L7 - goto block@5 - block@5: // switch_case_next_L7 - goto block@10 - block@6: // bare_routing_L7 - let tmp%38#0: uint64 = (txn OnCompletion) - switch tmp%38#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L7 - let tmp%39#0: uint64 = (txn ApplicationID) - let tmp%40#0: bool = (== tmp%39#0 0u) - (assert tmp%40#0) // can only call when creating - tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L7 - goto block@9 - block@9: // switch_case_next_L7 - goto block@10 - block@10: // after_if_else_L7 - return 0u - - subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testEncoding(a: uint64, b: bool, c: biguint, d: bytes, e: bytes) -> void: - block@0: // L8 - let val_as_bytes%0#0: bytes = (itob a#0) - let val_as_bytes%1#0: bytes = (itob a#0) - let tmp%0#0: bool = (== val_as_bytes%0#0 val_as_bytes%1#0) - (assert tmp%0#0) - let encoded_bool%0#0: bytes = (setbit 0x00 0u b#0) - let encoded_bool%1#0: bytes = (setbit 0x00 0u b#0) - let tmp%1#0: bool = (== encoded_bool%0#0 encoded_bool%1#0) - (assert tmp%1#0) - let len_%0#0: uint64 = (len c#0) - let no_overflow%0#0: bool = (<= len_%0#0 64u) - (assert no_overflow%0#0) // overflow - let b_zeros%0#0: bytes = (bzero 64u) - let tmp%2#0: bytes = (b| c#0 b_zeros%0#0) - let len_%1#0: uint64 = (len c#0) - let no_overflow%1#0: bool = (<= len_%1#0 64u) - (assert no_overflow%1#0) // overflow - let b_zeros%1#0: bytes = (bzero 64u) - let tmp%3#0: bytes = (b| c#0 b_zeros%1#0) - let tmp%4#0: bool = (== tmp%2#0 tmp%3#0) - (assert tmp%4#0) - let length%0#0: uint64 = (len d#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 d#0) - let length%1#0: uint64 = (len d#0) - let as_bytes%1#0: bytes = (itob length%1#0) - let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 d#0) - let tmp%5#0: bool = (== encoded_value%0#0 encoded_value%1#0) - (assert tmp%5#0) - let length%2#0: uint64 = (len e#0) - let as_bytes%2#0: bytes = (itob length%2#0) - let length_uint16%2#0: bytes = ((extract 6 2) as_bytes%2#0) - let encoded_value%2#0: bytes = (concat length_uint16%2#0 e#0) - let length%3#0: uint64 = (len e#0) - let as_bytes%3#0: bytes = (itob length%3#0) - let length_uint16%3#0: bytes = ((extract 6 2) as_bytes%3#0) - let encoded_value%3#0: bytes = (concat length_uint16%3#0 e#0) - let tmp%6#0: bool = (== encoded_value%2#0 encoded_value%3#0) - (assert tmp%6#0) - let val_as_bytes%2#0: bytes = (itob a#0) - let length%4#0: uint64 = (len d#0) - let as_bytes%4#0: bytes = (itob length%4#0) - let length_uint16%4#0: bytes = ((extract 6 2) as_bytes%4#0) - let encoded_value%4#0: bytes = (concat length_uint16%4#0 d#0) - let current_tail_offset%0#0: uint64 = 10u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%2#0) - let as_bytes%5#0: bytes = (itob current_tail_offset%0#0) - let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%5#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 offset_as_uint16%0#0) - let data_length%0#0: uint64 = (len encoded_value%4#0) - let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 encoded_value%4#0) - let val_as_bytes%3#0: bytes = (itob a#0) - let length%5#0: uint64 = (len d#0) - let as_bytes%6#0: bytes = (itob length%5#0) - let length_uint16%5#0: bytes = ((extract 6 2) as_bytes%6#0) - let encoded_value%5#0: bytes = (concat length_uint16%5#0 d#0) - let val_as_bytes%4#0: bytes = (itob a#0) - let length%6#0: uint64 = (len d#0) - let as_bytes%7#0: bytes = (itob length%6#0) - let length_uint16%6#0: bytes = ((extract 6 2) as_bytes%7#0) - let encoded_value%6#0: bytes = (concat length_uint16%6#0 d#0) - let current_tail_offset%2#0: uint64 = 10u - let encoded_tuple_buffer%4#0: bytes = 0x - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) - let as_bytes%8#0: bytes = (itob current_tail_offset%2#0) - let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%8#0) - let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 offset_as_uint16%1#0) - let data_length%1#0: uint64 = (len encoded_value%6#0) - let current_tail_offset%3#0: uint64 = (+ current_tail_offset%2#0 data_length%1#0) - let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 encoded_value%6#0) - let tmp%7#0: bool = (== encoded_tuple_buffer%3#0 encoded_tuple_buffer%7#0) - (assert tmp%7#0) - return - - subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.testDecoding(a: uint64, a_bytes: bytes, b: bool, b_bytes: bytes, c: biguint, c_bytes: bytes, d: bytes, d_bytes: bytes, e.a: bytes, e.b: bytes, e_bytes: bytes) -> void: - block@0: // L17 - let tmp%0#0: uint64 = (btoi a_bytes#0) - let tmp%1#0: bool = (== tmp%0#0 a#0) - (assert tmp%1#0) - let tmp%2#0: bool = (getbit b_bytes#0 0u) - let tmp%3#0: bool = (== tmp%2#0 b#0) - (assert tmp%3#0) - let tmp%4#0: bool = (b== c_bytes#0 c#0) - (assert tmp%4#0) - let tmp%5#0: bytes = ((extract 2 0) d_bytes#0) - let tmp%6#0: bool = (== tmp%5#0 d#0) - (assert tmp%6#0) - let item0%0#0: bytes = (extract3 e_bytes#0 0u 8u) // on error: Index access is out of bounds - let item_start_offset%0#0: uint64 = (extract_uint16 e_bytes#0 8u) - let item_end_offset%0#0: uint64 = (len e_bytes#0) - let item1%0#0: bytes = (substring3 e_bytes#0 item_start_offset%0#0 item_end_offset%0#0) - let tmp%7#0: bool = (== item0%0#0 e.a#0) - goto tmp%7#0 ? block@1 : block@3 - block@1: // and_contd_L34 - let item0%1#0: bytes = (extract3 e_bytes#0 0u 8u) // on error: Index access is out of bounds - let item_start_offset%1#0: uint64 = (extract_uint16 e_bytes#0 8u) - let item_end_offset%1#0: uint64 = (len e_bytes#0) - let item1%1#0: bytes = (substring3 e_bytes#0 item_start_offset%1#0 item_end_offset%1#0) - let tmp%8#0: bool = (== item1%1#0 e.b#0) - goto tmp%8#0 ? block@2 : block@3 - block@2: // bool_true_L34 - let and_result%0#0: bool = 1u - goto block@4 - block@3: // bool_false_L34 - let and_result%0#1: bool = 0u - goto block@4 - block@4: // bool_merge_L34 - let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) - (assert and_result%0#2) // assert target is match for conditions - return - - subroutine tests/approvals/arc4-encode-decode.algo.ts::Arc4EncodeDecode.__algots__.defaultCreate() -> void: - block@0: // L7 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-struct/StructDemo.approval.teal b/tests/approvals/out/arc4-struct/StructDemo.approval.teal index 7d28977b..9e086386 100644 --- a/tests/approvals/out/arc4-struct/StructDemo.approval.teal +++ b/tests/approvals/out/arc4-struct/StructDemo.approval.teal @@ -1,48 +1,45 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-struct.algo.ts::StructDemo.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 8 1 bytecblock 0x 0x0000000000000000 0x151f7c75 - callsub __puya_arc4_router__ - return - -// tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/arc4-struct.algo.ts:9 // class StructDemo extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@8 + bz main_bare_routing@9 + +main_abi_routing@2: + // tests/approvals/arc4-struct.algo.ts:9 + // class StructDemo extends Contract { txna ApplicationArgs 0 pushbytes 0x89388ddd // method "testVectorCreationAndEquality()void" pushbytes 0xef322d6d // method "addVectors((uint64,uint64),(uint64,uint64))(uint64,uint64)" pushbytes 0xcb81deb8 // method "implicitCastingAndSpreading((uint64,uint64))void" pushbytes 0xf79d6c46 // method "toAndFromBytes((uint64,uint64))(uint64,uint64)" uncover 4 - match __puya_arc4_router___testVectorCreationAndEquality_route@2 __puya_arc4_router___addVectors_route@3 __puya_arc4_router___implicitCastingAndSpreading_route@4 __puya_arc4_router___toAndFromBytes_route@5 - b __puya_arc4_router___switch_case_default@6 + match main_testVectorCreationAndEquality_route@3 main_addVectors_route@4 main_implicitCastingAndSpreading_route@5 main_toAndFromBytes_route@6 -__puya_arc4_router___testVectorCreationAndEquality_route@2: - // tests/approvals/arc4-struct.algo.ts:10 - // public testVectorCreationAndEquality() { - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID +main_switch_case_default@7: + +main_switch_case_next@8: + +main_after_if_else@13: + // tests/approvals/arc4-struct.algo.ts:9 + // class StructDemo extends Contract { intc_0 // 0 - != - assert // can only call when not creating - callsub testVectorCreationAndEquality - intc_2 // 1 - retsub -__puya_arc4_router___addVectors_route@3: - // tests/approvals/arc4-struct.algo.ts:18 - // public addVectors(v1: Vector, v2: Vector) { +main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14: + return + +main_toAndFromBytes_route@6: + // tests/approvals/arc4-struct.algo.ts:32 + // public toAndFromBytes(v1: Vector): Vector { txn OnCompletion intc_0 // NoOp == @@ -54,18 +51,17 @@ __puya_arc4_router___addVectors_route@3: // tests/approvals/arc4-struct.algo.ts:9 // class StructDemo extends Contract { txna ApplicationArgs 1 - txna ApplicationArgs 2 - // tests/approvals/arc4-struct.algo.ts:18 - // public addVectors(v1: Vector, v2: Vector) { - callsub addVectors + // tests/approvals/arc4-struct.algo.ts:32 + // public toAndFromBytes(v1: Vector): Vector { + callsub toAndFromBytes bytec_2 // 0x151f7c75 swap concat log intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14 -__puya_arc4_router___implicitCastingAndSpreading_route@4: +main_implicitCastingAndSpreading_route@5: // tests/approvals/arc4-struct.algo.ts:25 // public implicitCastingAndSpreading(v1: Vector) { txn OnCompletion @@ -83,11 +79,11 @@ __puya_arc4_router___implicitCastingAndSpreading_route@4: // public implicitCastingAndSpreading(v1: Vector) { callsub implicitCastingAndSpreading intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14 -__puya_arc4_router___toAndFromBytes_route@5: - // tests/approvals/arc4-struct.algo.ts:32 - // public toAndFromBytes(v1: Vector): Vector { +main_addVectors_route@4: + // tests/approvals/arc4-struct.algo.ts:18 + // public addVectors(v1: Vector, v2: Vector) { txn OnCompletion intc_0 // NoOp == @@ -99,29 +95,46 @@ __puya_arc4_router___toAndFromBytes_route@5: // tests/approvals/arc4-struct.algo.ts:9 // class StructDemo extends Contract { txna ApplicationArgs 1 - // tests/approvals/arc4-struct.algo.ts:32 - // public toAndFromBytes(v1: Vector): Vector { - callsub toAndFromBytes + txna ApplicationArgs 2 + // tests/approvals/arc4-struct.algo.ts:18 + // public addVectors(v1: Vector, v2: Vector) { + callsub addVectors bytec_2 // 0x151f7c75 swap concat log intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14 -__puya_arc4_router___switch_case_default@6: - b __puya_arc4_router___after_if_else@12 +main_testVectorCreationAndEquality_route@3: + // tests/approvals/arc4-struct.algo.ts:10 + // public testVectorCreationAndEquality() { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub testVectorCreationAndEquality + intc_2 // 1 + b main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14 -__puya_arc4_router___bare_routing@8: +main_bare_routing@9: // tests/approvals/arc4-struct.algo.ts:9 // class StructDemo extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@9 - b __puya_arc4_router___switch_case_default@10 + match main___algots__.defaultCreate@10 + +main_switch_case_default@11: -__puya_arc4_router_____algots__.defaultCreate@9: +main_switch_case_next@12: + b main_after_if_else@13 + +main___algots__.defaultCreate@10: // tests/approvals/arc4-struct.algo.ts:9 // class StructDemo extends Contract { txn ApplicationID @@ -130,15 +143,7 @@ __puya_arc4_router_____algots__.defaultCreate@9: assert // can only call when creating callsub __algots__.defaultCreate intc_2 // 1 - retsub - -__puya_arc4_router___switch_case_default@10: - -__puya_arc4_router___after_if_else@12: - // tests/approvals/arc4-struct.algo.ts:9 - // class StructDemo extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__@14 // tests/approvals/arc4-struct.algo.ts::StructDemo.testVectorCreationAndEquality() -> void: diff --git a/tests/approvals/out/arc4-struct/StructDemo.arc32.json b/tests/approvals/out/arc4-struct/StructDemo.arc32.json index b33a12ca..de7fdf40 100644 --- a/tests/approvals/out/arc4-struct/StructDemo.arc32.json +++ b/tests/approvals/out/arc4-struct/StructDemo.arc32.json @@ -106,8 +106,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCA4IDEKICAgIGJ5dGVjYmxvY2sgMHggMHgwMDAwMDAwMDAwMDAwMDAwIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4OTM4OGRkZCAvLyBtZXRob2QgInRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZWYzMjJkNmQgLy8gbWV0aG9kICJhZGRWZWN0b3JzKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4Y2I4MWRlYjggLy8gbWV0aG9kICJpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcoKHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmNzlkNmM0NiAvLyBtZXRob2QgInRvQW5kRnJvbUJ5dGVzKCh1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQ2NCkiCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fYWRkVmVjdG9yc19yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2ltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FkZFZlY3RvcnNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE4CiAgICAvLyBwdWJsaWMgYWRkVmVjdG9ycyh2MTogVmVjdG9yLCB2MjogVmVjdG9yKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTgKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpIHsKICAgIGNhbGxzdWIgYWRkVmVjdG9ycwogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19faW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IFZlY3RvcikgewogICAgY2FsbHN1YiBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMgogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgdG9BbmRGcm9tQnl0ZXModjE6IFZlY3Rvcik6IFZlY3RvciB7CiAgICBjYWxsc3ViIHRvQW5kRnJvbUJ5dGVzCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOQogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18yIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgLT4gdm9pZDoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gcHVibGljIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMQogICAgLy8gY29uc3QgdjEgPSBuZXcgVmVjdG9yKHsgeDogbmV3IEFSQzRVaW50NjQoMCksIHk6IG5ldyBBUkM0VWludDY0KDApIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMgogICAgLy8gbG9nKHYxLngpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEzCiAgICAvLyBsb2codjEueSkKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IoeyB5OiBuZXcgQVJDNFVpbnQ2NCgwKSwgeDogbmV3IEFSQzRVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQodjEgPT09IHYyKQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9ycyh2MTogYnl0ZXMsIHYyOiBieXRlcykgLT4gYnl0ZXM6CmFkZFZlY3RvcnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMAogICAgLy8geDogbmV3IEFSQzRVaW50NjQodjEueC5uYXRpdmUgKyB2Mi54Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMQogICAgLy8geTogbmV3IEFSQzRVaW50NjQodjEueS5uYXRpdmUgKyB2Mi55Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE5LTIyCiAgICAvLyByZXR1cm4gbmV3IFZlY3Rvcih7CiAgICAvLyAgIHg6IG5ldyBBUkM0VWludDY0KHYxLngubmF0aXZlICsgdjIueC5uYXRpdmUpLAogICAgLy8gICB5OiBuZXcgQVJDNFVpbnQ2NCh2MS55Lm5hdGl2ZSArIHYyLnkubmF0aXZlKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IGJ5dGVzKSAtPiB2b2lkOgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IodjEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IHYzID0gbmV3IFZlY3Rvcih7IC4uLnYyIH0pCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjgKICAgIC8vIGFzc2VydCh2MS5ieXRlcyA9PT0gdjIuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2My5ieXRlcyA9PT0gdjEuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzKHYxOiBieXRlcykgLT4gYnl0ZXM6CnRvQW5kRnJvbUJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHYxX2J5dGVzID0gdjEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VmVjdG9yPih2MV9ieXRlcykKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEKICAgIGJ5dGVjYmxvY2sgMHggMHgwMDAwMDAwMDAwMDAwMDAwIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ODkzODhkZGQgLy8gbWV0aG9kICJ0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMzIyZDZkIC8vIG1ldGhvZCAiYWRkVmVjdG9ycygodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweGNiODFkZWI4IC8vIG1ldGhvZCAiaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKCh1aW50NjQsdWludDY0KSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4Zjc5ZDZjNDYgLy8gbWV0aG9kICJ0b0FuZEZyb21CeXRlcygodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X3JvdXRlQDMgbWFpbl9hZGRWZWN0b3JzX3JvdXRlQDQgbWFpbl9pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdfcm91dGVANSBtYWluX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl90b0FuZEZyb21CeXRlc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMgogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgY2FsbHN1YiB0b0FuZEZyb21CeXRlcwogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2ltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IFZlY3RvcikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKHYxOiBWZWN0b3IpIHsKICAgIGNhbGxzdWIgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWRkVmVjdG9yc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTgKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgY2FsbHN1YiBhZGRWZWN0b3JzCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5CiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgLT4gdm9pZDoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gcHVibGljIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMQogICAgLy8gY29uc3QgdjEgPSBuZXcgVmVjdG9yKHsgeDogbmV3IEFSQzRVaW50NjQoMCksIHk6IG5ldyBBUkM0VWludDY0KDApIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMgogICAgLy8gbG9nKHYxLngpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEzCiAgICAvLyBsb2codjEueSkKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IoeyB5OiBuZXcgQVJDNFVpbnQ2NCgwKSwgeDogbmV3IEFSQzRVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQodjEgPT09IHYyKQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9ycyh2MTogYnl0ZXMsIHYyOiBieXRlcykgLT4gYnl0ZXM6CmFkZFZlY3RvcnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMAogICAgLy8geDogbmV3IEFSQzRVaW50NjQodjEueC5uYXRpdmUgKyB2Mi54Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMQogICAgLy8geTogbmV3IEFSQzRVaW50NjQodjEueS5uYXRpdmUgKyB2Mi55Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE5LTIyCiAgICAvLyByZXR1cm4gbmV3IFZlY3Rvcih7CiAgICAvLyAgIHg6IG5ldyBBUkM0VWludDY0KHYxLngubmF0aXZlICsgdjIueC5uYXRpdmUpLAogICAgLy8gICB5OiBuZXcgQVJDNFVpbnQ2NCh2MS55Lm5hdGl2ZSArIHYyLnkubmF0aXZlKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IGJ5dGVzKSAtPiB2b2lkOgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IodjEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IHYzID0gbmV3IFZlY3Rvcih7IC4uLnYyIH0pCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjgKICAgIC8vIGFzc2VydCh2MS5ieXRlcyA9PT0gdjIuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2My5ieXRlcyA9PT0gdjEuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzKHYxOiBieXRlcykgLT4gYnl0ZXM6CnRvQW5kRnJvbUJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHYxX2J5dGVzID0gdjEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VmVjdG9yPih2MV9ieXRlcykKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/arc4-struct/StructDemo.arc56.json b/tests/approvals/out/arc4-struct/StructDemo.arc56.json index 9cf95939..48e62791 100644 --- a/tests/approvals/out/arc4-struct/StructDemo.arc56.json +++ b/tests/approvals/out/arc4-struct/StructDemo.arc56.json @@ -141,40 +141,40 @@ "sourceInfo": [ { "pc": [ - 196, - 201, - 218, - 224, - 232, - 238, - 256, - 261, - 271, - 276 + 193, + 198, + 215, + 221, + 229, + 235, + 253, + 258, + 268, + 273 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ - 83, - 98, - 123, - 141 + 75, + 99, + 119, + 146 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 177 + 174 ], "errorMessage": "can only call when creating" }, { "pc": [ - 88, - 103, - 128, - 146 + 80, + 104, + 124, + 151 ], "errorMessage": "can only call when not creating" } @@ -187,8 +187,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCA4IDEKICAgIGJ5dGVjYmxvY2sgMHggMHgwMDAwMDAwMDAwMDAwMDAwIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4OTM4OGRkZCAvLyBtZXRob2QgInRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZWYzMjJkNmQgLy8gbWV0aG9kICJhZGRWZWN0b3JzKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4Y2I4MWRlYjggLy8gbWV0aG9kICJpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcoKHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmNzlkNmM0NiAvLyBtZXRob2QgInRvQW5kRnJvbUJ5dGVzKCh1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQ2NCkiCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fYWRkVmVjdG9yc19yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2ltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTAKICAgIC8vIHB1YmxpYyB0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FkZFZlY3RvcnNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE4CiAgICAvLyBwdWJsaWMgYWRkVmVjdG9ycyh2MTogVmVjdG9yLCB2MjogVmVjdG9yKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTgKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpIHsKICAgIGNhbGxzdWIgYWRkVmVjdG9ycwogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19faW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IFZlY3RvcikgewogICAgY2FsbHN1YiBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMgogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgdG9BbmRGcm9tQnl0ZXModjE6IFZlY3Rvcik6IFZlY3RvciB7CiAgICBjYWxsc3ViIHRvQW5kRnJvbUJ5dGVzCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOQogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18yIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgLT4gdm9pZDoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gcHVibGljIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMQogICAgLy8gY29uc3QgdjEgPSBuZXcgVmVjdG9yKHsgeDogbmV3IEFSQzRVaW50NjQoMCksIHk6IG5ldyBBUkM0VWludDY0KDApIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMgogICAgLy8gbG9nKHYxLngpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEzCiAgICAvLyBsb2codjEueSkKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IoeyB5OiBuZXcgQVJDNFVpbnQ2NCgwKSwgeDogbmV3IEFSQzRVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQodjEgPT09IHYyKQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9ycyh2MTogYnl0ZXMsIHYyOiBieXRlcykgLT4gYnl0ZXM6CmFkZFZlY3RvcnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMAogICAgLy8geDogbmV3IEFSQzRVaW50NjQodjEueC5uYXRpdmUgKyB2Mi54Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMQogICAgLy8geTogbmV3IEFSQzRVaW50NjQodjEueS5uYXRpdmUgKyB2Mi55Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE5LTIyCiAgICAvLyByZXR1cm4gbmV3IFZlY3Rvcih7CiAgICAvLyAgIHg6IG5ldyBBUkM0VWludDY0KHYxLngubmF0aXZlICsgdjIueC5uYXRpdmUpLAogICAgLy8gICB5OiBuZXcgQVJDNFVpbnQ2NCh2MS55Lm5hdGl2ZSArIHYyLnkubmF0aXZlKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IGJ5dGVzKSAtPiB2b2lkOgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IodjEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IHYzID0gbmV3IFZlY3Rvcih7IC4uLnYyIH0pCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjgKICAgIC8vIGFzc2VydCh2MS5ieXRlcyA9PT0gdjIuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2My5ieXRlcyA9PT0gdjEuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzKHYxOiBieXRlcykgLT4gYnl0ZXM6CnRvQW5kRnJvbUJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHYxX2J5dGVzID0gdjEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VmVjdG9yPih2MV9ieXRlcykKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEKICAgIGJ5dGVjYmxvY2sgMHggMHgwMDAwMDAwMDAwMDAwMDAwIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ODkzODhkZGQgLy8gbWV0aG9kICJ0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMzIyZDZkIC8vIG1ldGhvZCAiYWRkVmVjdG9ycygodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweGNiODFkZWI4IC8vIG1ldGhvZCAiaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKCh1aW50NjQsdWludDY0KSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4Zjc5ZDZjNDYgLy8gbWV0aG9kICJ0b0FuZEZyb21CeXRlcygodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5X3JvdXRlQDMgbWFpbl9hZGRWZWN0b3JzX3JvdXRlQDQgbWFpbl9pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdfcm91dGVANSBtYWluX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDYKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDg6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNDoKICAgIHJldHVybgoKbWFpbl90b0FuZEZyb21CeXRlc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMgogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgY2FsbHN1YiB0b0FuZEZyb21CeXRlcwogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2ltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjUKICAgIC8vIHB1YmxpYyBpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IFZlY3RvcikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OQogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI1CiAgICAvLyBwdWJsaWMgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKHYxOiBWZWN0b3IpIHsKICAgIGNhbGxzdWIgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYWRkVmVjdG9yc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTgKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgY2FsbHN1YiBhZGRWZWN0b3JzCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEwCiAgICAvLyBwdWJsaWMgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5CiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo5CiAgICAvLyBjbGFzcyBTdHJ1Y3REZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgLT4gdm9pZDoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gcHVibGljIHRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMQogICAgLy8gY29uc3QgdjEgPSBuZXcgVmVjdG9yKHsgeDogbmV3IEFSQzRVaW50NjQoMCksIHk6IG5ldyBBUkM0VWludDY0KDApIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMgogICAgLy8gbG9nKHYxLngpCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEzCiAgICAvLyBsb2codjEueSkKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBsb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE0CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IoeyB5OiBuZXcgQVJDNFVpbnQ2NCgwKSwgeDogbmV3IEFSQzRVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQodjEgPT09IHYyKQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9ycyh2MTogYnl0ZXMsIHYyOiBieXRlcykgLT4gYnl0ZXM6CmFkZFZlY3RvcnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOAogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMAogICAgLy8geDogbmV3IEFSQzRVaW50NjQodjEueC5uYXRpdmUgKyB2Mi54Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyMQogICAgLy8geTogbmV3IEFSQzRVaW50NjQodjEueS5uYXRpdmUgKyB2Mi55Lm5hdGl2ZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgICsKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE5LTIyCiAgICAvLyByZXR1cm4gbmV3IFZlY3Rvcih7CiAgICAvLyAgIHg6IG5ldyBBUkM0VWludDY0KHYxLngubmF0aXZlICsgdjIueC5uYXRpdmUpLAogICAgLy8gICB5OiBuZXcgQVJDNFVpbnQ2NCh2MS55Lm5hdGl2ZSArIHYyLnkubmF0aXZlKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcodjE6IGJ5dGVzKSAtPiB2b2lkOgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNQogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCB2MiA9IG5ldyBWZWN0b3IodjEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IHYzID0gbmV3IFZlY3Rvcih7IC4uLnYyIH0pCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjgKICAgIC8vIGFzc2VydCh2MS5ieXRlcyA9PT0gdjIuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2My5ieXRlcyA9PT0gdjEuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzKHYxOiBieXRlcykgLT4gYnl0ZXM6CnRvQW5kRnJvbUJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHYxX2J5dGVzID0gdjEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VmVjdG9yPih2MV9ieXRlcykKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjkKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiADAAgBJgMACAAAAAAAAAAABBUffHUxGyITQQCBNhoAgASJOI3dgATvMi1tgATLgd64gAT3nWxGTwSOBABJAC4AGgACIkMxGSISRDEYIhNENhoBiADMKkxQsCRC/+cxGSISRDEYIhNENhoBiACHJEL/0zEZIhJEMRgiE0Q2GgE2GgKIAEoqTFCwJEL/uDEZIhJEMRgiE0SIABskQv+nMRkiTI4BAANC/5sxGCISRIgAdyRC/5CKAAAoKVApUEkiI1iwSSNJWLAoKVApUBJEiYoCAYv+IiNYF4v/IiNYFwgWi/4jSVgXi/8jSVgXCBYoTwJQTFCJigEAi/8iI1iL/yNJWChPAlBMUEkiI1hMSSNJWChPA1BMUIv/TwISRIv/EkSJigEBi/+JigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/arc4-struct/StructDemo.clear.teal b/tests/approvals/out/arc4-struct/StructDemo.clear.teal index a4fb2c83..a4d58047 100644 --- a/tests/approvals/out/arc4-struct/StructDemo.clear.teal +++ b/tests/approvals/out/arc4-struct/StructDemo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-struct.algo.ts::StructDemo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.approval.0.ssa.ir b/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.approval.0.ssa.ir new file mode 100644 index 00000000..3361ac0c --- /dev/null +++ b/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.approval.0.ssa.ir @@ -0,0 +1,163 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__() -> bool: + block@0: // L9 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L9 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "testVectorCreationAndEquality()void" => block@2, method "addVectors((uint64,uint64),(uint64,uint64))(uint64,uint64)" => block@3, method "implicitCastingAndSpreading((uint64,uint64))void" => block@4, method "toAndFromBytes((uint64,uint64))(uint64,uint64)" => block@5, * => block@6} + block@2: // testVectorCreationAndEquality_route_L10 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/arc4-struct.algo.ts::StructDemo.testVectorCreationAndEquality() + return 1u + block@3: // addVectors_route_L18 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let tmp%11#0: bytes = (txna ApplicationArgs 1) + let tmp%12#0: bytes = (txna ApplicationArgs 2) + let tmp%13#0: bytes = tests/approvals/arc4-struct.algo.ts::StructDemo.addVectors(tmp%11#0, tmp%12#0) + let tmp%14#0: bytes = (concat 0x151f7c75 tmp%13#0) + (log tmp%14#0) + return 1u + block@4: // implicitCastingAndSpreading_route_L25 + let tmp%15#0: uint64 = (txn OnCompletion) + let tmp%16#0: bool = (== tmp%15#0 NoOp) + (assert tmp%16#0) // OnCompletion is not NoOp + let tmp%17#0: uint64 = (txn ApplicationID) + let tmp%18#0: bool = (!= tmp%17#0 0u) + (assert tmp%18#0) // can only call when not creating + let tmp%19#0: bytes = (txna ApplicationArgs 1) + tests/approvals/arc4-struct.algo.ts::StructDemo.implicitCastingAndSpreading(tmp%19#0) + return 1u + block@5: // toAndFromBytes_route_L32 + let tmp%20#0: uint64 = (txn OnCompletion) + let tmp%21#0: bool = (== tmp%20#0 NoOp) + (assert tmp%21#0) // OnCompletion is not NoOp + let tmp%22#0: uint64 = (txn ApplicationID) + let tmp%23#0: bool = (!= tmp%22#0 0u) + (assert tmp%23#0) // can only call when not creating + let tmp%24#0: bytes = (txna ApplicationArgs 1) + let tmp%25#0: bytes = tests/approvals/arc4-struct.algo.ts::StructDemo.toAndFromBytes(tmp%24#0) + let tmp%26#0: bytes = (concat 0x151f7c75 tmp%25#0) + (log tmp%26#0) + return 1u + block@6: // switch_case_default_L9 + goto block@7 + block@7: // switch_case_next_L9 + goto block@12 + block@8: // bare_routing_L9 + let tmp%27#0: uint64 = (txn OnCompletion) + switch tmp%27#0 {0u => block@9, * => block@10} + block@9: // __algots__.defaultCreate_L9 + let tmp%28#0: uint64 = (txn ApplicationID) + let tmp%29#0: bool = (== tmp%28#0 0u) + (assert tmp%29#0) // can only call when creating + tests/approvals/arc4-struct.algo.ts::StructDemo.__algots__.defaultCreate() + return 1u + block@10: // switch_case_default_L9 + goto block@11 + block@11: // switch_case_next_L9 + goto block@12 + block@12: // after_if_else_L9 + return 0u + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.testVectorCreationAndEquality() -> void: + block@0: // L10 + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 0x0000000000000000) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 0x0000000000000000) + let v1#0: bytes = encoded_tuple_buffer%2#0 + let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds + (log tmp%0#0) + let tmp%1#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds + (log tmp%1#0) + let current_tail_offset%1#0: uint64 = 16u + let encoded_tuple_buffer%3#0: bytes = 0x + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 0x0000000000000000) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 0x0000000000000000) + let v2#0: bytes = encoded_tuple_buffer%5#0 + let tmp%2#0: bool = (== v1#0 v2#0) + (assert tmp%2#0) + return + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.addVectors(v1: bytes, v2: bytes) -> bytes: + block@0: // L18 + let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds + let tmp%1#0: uint64 = (btoi tmp%0#0) + let tmp%2#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds + let tmp%3#0: uint64 = (btoi tmp%2#0) + let to_encode%0#0: uint64 = (+ tmp%1#0 tmp%3#0) + let val_as_bytes%0#0: bytes = (itob to_encode%0#0) + let tmp%4#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds + let tmp%5#0: uint64 = (btoi tmp%4#0) + let tmp%6#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds + let tmp%7#0: uint64 = (btoi tmp%6#0) + let to_encode%1#0: uint64 = (+ tmp%5#0 tmp%7#0) + let val_as_bytes%1#0: bytes = (itob to_encode%1#0) + let tmp%8#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds + let tmp%9#0: uint64 = (btoi tmp%8#0) + let tmp%10#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds + let tmp%11#0: uint64 = (btoi tmp%10#0) + let to_encode%2#0: uint64 = (+ tmp%9#0 tmp%11#0) + let val_as_bytes%2#0: bytes = (itob to_encode%2#0) + let tmp%12#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds + let tmp%13#0: uint64 = (btoi tmp%12#0) + let tmp%14#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds + let tmp%15#0: uint64 = (btoi tmp%14#0) + let to_encode%3#0: uint64 = (+ tmp%13#0 tmp%15#0) + let val_as_bytes%3#0: bytes = (itob to_encode%3#0) + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%3#0) + return encoded_tuple_buffer%2#0 + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.implicitCastingAndSpreading(v1: bytes) -> void: + block@0: // L25 + let item0%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds + let item1%0#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds + let item0%1#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds + let item1%1#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 item0%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 item1%1#0) + let v2#0: bytes = encoded_tuple_buffer%2#0 + let tmp%0#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds + let tmp%1#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds + let tmp%2#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds + let tmp%3#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds + let current_tail_offset%1#0: uint64 = 16u + let encoded_tuple_buffer%3#0: bytes = 0x + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%0#0) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 tmp%3#0) + let v3#0: bytes = encoded_tuple_buffer%5#0 + let tmp%4#0: bool = (== v1#0 v2#0) + (assert tmp%4#0) + let tmp%5#0: bool = (== v3#0 v1#0) + (assert tmp%5#0) + return + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.toAndFromBytes(v1: bytes) -> bytes: + block@0: // L32 + let v1_bytes#0: bytes = v1#0 + return v1_bytes#0 + +subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.__algots__.defaultCreate() -> void: + block@0: // L9 + return \ No newline at end of file diff --git a/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.clear.0.ssa.ir b/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/arc4-struct/StructDemo.ir/StructDemo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-struct/StructDemo.ssa.ir b/tests/approvals/out/arc4-struct/StructDemo.ssa.ir deleted file mode 100644 index f03cdf4f..00000000 --- a/tests/approvals/out/arc4-struct/StructDemo.ssa.ir +++ /dev/null @@ -1,170 +0,0 @@ -contract tests/approvals/arc4-struct.algo.ts::StructDemo: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.__puya_arc4_router__() -> bool: - block@0: // L9 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // abi_routing_L9 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "testVectorCreationAndEquality()void" => block@2, method "addVectors((uint64,uint64),(uint64,uint64))(uint64,uint64)" => block@3, method "implicitCastingAndSpreading((uint64,uint64))void" => block@4, method "toAndFromBytes((uint64,uint64))(uint64,uint64)" => block@5, * => block@6} - block@2: // testVectorCreationAndEquality_route_L10 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/arc4-struct.algo.ts::StructDemo.testVectorCreationAndEquality() - return 1u - block@3: // addVectors_route_L18 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 NoOp) - (assert tmp%8#0) // OnCompletion is not NoOp - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (!= tmp%9#0 0u) - (assert tmp%10#0) // can only call when not creating - let tmp%11#0: bytes = (txna ApplicationArgs 1) - let tmp%12#0: bytes = (txna ApplicationArgs 2) - let tmp%13#0: bytes = tests/approvals/arc4-struct.algo.ts::StructDemo.addVectors(tmp%11#0, tmp%12#0) - let tmp%14#0: bytes = (concat 0x151f7c75 tmp%13#0) - (log tmp%14#0) - return 1u - block@4: // implicitCastingAndSpreading_route_L25 - let tmp%15#0: uint64 = (txn OnCompletion) - let tmp%16#0: bool = (== tmp%15#0 NoOp) - (assert tmp%16#0) // OnCompletion is not NoOp - let tmp%17#0: uint64 = (txn ApplicationID) - let tmp%18#0: bool = (!= tmp%17#0 0u) - (assert tmp%18#0) // can only call when not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - tests/approvals/arc4-struct.algo.ts::StructDemo.implicitCastingAndSpreading(tmp%19#0) - return 1u - block@5: // toAndFromBytes_route_L32 - let tmp%20#0: uint64 = (txn OnCompletion) - let tmp%21#0: bool = (== tmp%20#0 NoOp) - (assert tmp%21#0) // OnCompletion is not NoOp - let tmp%22#0: uint64 = (txn ApplicationID) - let tmp%23#0: bool = (!= tmp%22#0 0u) - (assert tmp%23#0) // can only call when not creating - let tmp%24#0: bytes = (txna ApplicationArgs 1) - let tmp%25#0: bytes = tests/approvals/arc4-struct.algo.ts::StructDemo.toAndFromBytes(tmp%24#0) - let tmp%26#0: bytes = (concat 0x151f7c75 tmp%25#0) - (log tmp%26#0) - return 1u - block@6: // switch_case_default_L9 - goto block@7 - block@7: // switch_case_next_L9 - goto block@12 - block@8: // bare_routing_L9 - let tmp%27#0: uint64 = (txn OnCompletion) - switch tmp%27#0 {0u => block@9, * => block@10} - block@9: // __algots__.defaultCreate_L9 - let tmp%28#0: uint64 = (txn ApplicationID) - let tmp%29#0: bool = (== tmp%28#0 0u) - (assert tmp%29#0) // can only call when creating - tests/approvals/arc4-struct.algo.ts::StructDemo.__algots__.defaultCreate() - return 1u - block@10: // switch_case_default_L9 - goto block@11 - block@11: // switch_case_next_L9 - goto block@12 - block@12: // after_if_else_L9 - return 0u - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.testVectorCreationAndEquality() -> void: - block@0: // L10 - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 0x0000000000000000) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 0x0000000000000000) - let v1#0: bytes = encoded_tuple_buffer%2#0 - let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds - (log tmp%0#0) - let tmp%1#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds - (log tmp%1#0) - let current_tail_offset%1#0: uint64 = 16u - let encoded_tuple_buffer%3#0: bytes = 0x - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 0x0000000000000000) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 0x0000000000000000) - let v2#0: bytes = encoded_tuple_buffer%5#0 - let tmp%2#0: bool = (== v1#0 v2#0) - (assert tmp%2#0) - return - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.addVectors(v1: bytes, v2: bytes) -> bytes: - block@0: // L18 - let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds - let tmp%1#0: uint64 = (btoi tmp%0#0) - let tmp%2#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds - let tmp%3#0: uint64 = (btoi tmp%2#0) - let to_encode%0#0: uint64 = (+ tmp%1#0 tmp%3#0) - let val_as_bytes%0#0: bytes = (itob to_encode%0#0) - let tmp%4#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds - let tmp%5#0: uint64 = (btoi tmp%4#0) - let tmp%6#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds - let tmp%7#0: uint64 = (btoi tmp%6#0) - let to_encode%1#0: uint64 = (+ tmp%5#0 tmp%7#0) - let val_as_bytes%1#0: bytes = (itob to_encode%1#0) - let tmp%8#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds - let tmp%9#0: uint64 = (btoi tmp%8#0) - let tmp%10#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds - let tmp%11#0: uint64 = (btoi tmp%10#0) - let to_encode%2#0: uint64 = (+ tmp%9#0 tmp%11#0) - let val_as_bytes%2#0: bytes = (itob to_encode%2#0) - let tmp%12#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds - let tmp%13#0: uint64 = (btoi tmp%12#0) - let tmp%14#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds - let tmp%15#0: uint64 = (btoi tmp%14#0) - let to_encode%3#0: uint64 = (+ tmp%13#0 tmp%15#0) - let val_as_bytes%3#0: bytes = (itob to_encode%3#0) - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%3#0) - return encoded_tuple_buffer%2#0 - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.implicitCastingAndSpreading(v1: bytes) -> void: - block@0: // L25 - let item0%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds - let item1%0#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds - let item0%1#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds - let item1%1#0: bytes = (extract3 v1#0 8u 8u) // on error: Index access is out of bounds - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 item0%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 item1%1#0) - let v2#0: bytes = encoded_tuple_buffer%2#0 - let tmp%0#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds - let tmp%1#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds - let tmp%2#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds - let tmp%3#0: bytes = (extract3 v2#0 8u 8u) // on error: Index access is out of bounds - let current_tail_offset%1#0: uint64 = 16u - let encoded_tuple_buffer%3#0: bytes = 0x - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 tmp%0#0) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 tmp%3#0) - let v3#0: bytes = encoded_tuple_buffer%5#0 - let tmp%4#0: bool = (== v1#0 v2#0) - (assert tmp%4#0) - let tmp%5#0: bool = (== v3#0 v1#0) - (assert tmp%5#0) - return - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.toAndFromBytes(v1: bytes) -> bytes: - block@0: // L32 - let v1_bytes#0: bytes = v1#0 - return v1_bytes#0 - - subroutine tests/approvals/arc4-struct.algo.ts::StructDemo.__algots__.defaultCreate() -> void: - block@0: // L9 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-types/Arc4TypesTestContract.approval.teal b/tests/approvals/out/arc4-types/Arc4TypesTestContract.approval.teal index c593b9e3..5123903a 100644 --- a/tests/approvals/out/arc4-types/Arc4TypesTestContract.approval.teal +++ b/tests/approvals/out/arc4-types/Arc4TypesTestContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract.approvalProgram: +// tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract.approvalProgram() -> uint64: +main: intcblock 0 1 8 2 bytecblock 0x 0x0000 0x00 base32(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) 0x000548656c6c6f // tests/approvals/arc4-types.algo.ts:140 diff --git a/tests/approvals/out/arc4-types/Arc4TypesTestContract.clear.teal b/tests/approvals/out/arc4-types/Arc4TypesTestContract.clear.teal index eac7fd54..a4d58047 100644 --- a/tests/approvals/out/arc4-types/Arc4TypesTestContract.clear.teal +++ b/tests/approvals/out/arc4-types/Arc4TypesTestContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.approval.0.ssa.ir b/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.approval.0.ssa.ir new file mode 100644 index 00000000..4d83c860 --- /dev/null +++ b/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.approval.0.ssa.ir @@ -0,0 +1,212 @@ +main tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract.approvalProgram: + block@0: // L138 + let x#0: bytes = 0x0000000000000000 + tests/approvals/arc4-types.algo.ts::testStr() + tests/approvals/arc4-types.algo.ts::testUintN(1u, 2b, 0x0000000000000000000000000000000000000000000000000000000000000004) + tests/approvals/arc4-types.algo.ts::testUFixed() + tests/approvals/arc4-types.algo.ts::testByte() + tests/approvals/arc4-types.algo.ts::testArrays(0x0000000000000041) + tests/approvals/arc4-types.algo.ts::testAddress() + tests/approvals/arc4-types.algo.ts::testTuple() + tests/approvals/arc4-types.algo.ts::testUFixed() + tests/approvals/arc4-types.algo.ts::testDynamicBytes("hmmmmmmmmm") + tests/approvals/arc4-types.algo.ts::testStaticBytes() + let array_data%0#0: bytes = (concat 0x0000 0x) + let result#0: bytes = array_data%0#0 + let tmp%0#0: uint64 = (extract_uint16 result#0 0u) + let tmp%1#0: bool = (== tmp%0#0 0u) + (assert tmp%1#0) + return 1u + +subroutine tests/approvals/arc4-types.algo.ts::testStr() -> void: + block@0: // L62 + let s1#0: bytes = 0x0000 + let tmp%0#0: bool = (== s1#0 0x0000) + (assert tmp%0#0) // Empty string should equal the uint16 length prefix + let s2#0: bytes = 0x000548656c6c6f + let tmp%1#0: bytes = ((extract 2 0) s2#0) + let tmp%2#0: bool = (== tmp%1#0 "Hello") + (assert tmp%2#0) + let s2_bytes#0: bytes = s2#0 + let s2_from_bytes#0: bytes = s2_bytes#0 + let tmp%3#0: bool = (== s2#0 s2_from_bytes#0) + (assert tmp%3#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testUintN(n: uint64, b: biguint, c: bytes) -> void: + block@0: // L27 + let x#0: bytes = 0x04 + let tmp%0#0: uint64 = (len x#0) + let tmp%1#0: bool = (== tmp%0#0 1u) + (assert tmp%1#0) + let x2#0: bytes = 0xff + let tmp%2#0: bool = (== x2#0 0xff) + (assert tmp%2#0) + let y#0: bytes = 0x0000 + let tmp%3#0: uint64 = (len y#0) + let tmp%4#0: bool = (== tmp%3#0 2u) + (assert tmp%4#0) + let val_as_bytes%0#0: bytes = (itob n#0) + let z#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let z_native#0: uint64 = (btoi z#0) + let tmp%5#0: bool = (== z_native#0 n#0) + (assert tmp%5#0) + let big128#0: bytes = 0x00000010000000000000000000000000 + let len_%0#0: uint64 = (len b#0) + let no_overflow%0#0: bool = (<= len_%0#0 16u) + (assert no_overflow%0#0) // overflow + let b_zeros%0#0: bytes = (bzero 16u) + let a#0: bytes = (b| b#0 b_zeros%0#0) + let a_native#0: biguint = a#0 + let tmp%6#0: bool = (b== a_native#0 b#0) + (assert tmp%6#0) + let tmp%7#0: uint64 = (len c#0) + let tmp%8#0: bool = (== tmp%7#0 32u) + (assert tmp%8#0) + let a_bytes#0: bytes = a#0 + let a_from_bytes#0: bytes = a_bytes#0 + let tmp%9#0: bool = (== a_from_bytes#0 a#0) + (assert tmp%9#0) + let aliased64#0: bytes = 0x000000000000000c + let tmp%10#0: uint64 = (btoi aliased64#0) + let tmp%11#0: bool = (== tmp%10#0 12u) + (assert tmp%11#0) + let aliased32#0: bytes = 0x0000c571 + let reinterpret_biguint%0#0: biguint = aliased32#0 + let tmp%12#0: bool = (b== reinterpret_biguint%0#0 50545b) + (assert tmp%12#0) + let byte#0: bytes = 0xff + let tmp%13#0: bytes = (b~ byte#0) + let tmp%14#0: bool = (== tmp%13#0 0x00) + (assert tmp%14#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testUFixed() -> void: + block@0: // L20 + let a#0: bytes = 0x000004dc + let c#0: bytes = 0x000004dc + let tmp%0#0: bool = (== a#0 c#0) + (assert tmp%0#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testByte() -> void: + block@0: // L109 + let b#0: bytes = 0x00 + let b2#0: bytes = 0x00 + let tmp%0#0: bool = (== b#0 b2#0) + (assert tmp%0#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testArrays(n: bytes) -> void: + block@0: // L95 + let result%0#0: bytes = (concat 0x n#0) + let result%1#0: bytes = (concat result%0#0 n#0) + let result%2#0: bytes = (concat result%1#0 n#0) + let array_data%0#0: bytes = (concat 0x0003 result%2#0) + let myArray#0: bytes = array_data%0#0 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) myArray#0) + let data%0#0: bytes = (concat 0x n#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let byte_len%0#0: uint64 = (len concatenated%0#0) + let len_%0#0: uint64 = (/ byte_len%0#0 8u) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let myArray#1: bytes = concat_result%0#0 + let result%3#0: bytes = (concat 0x n#0) + let result%4#0: bytes = (concat result%3#0 n#0) + let array_data%1#0: bytes = (concat 0x result%4#0) + let myStatic#0: bytes = array_data%1#0 + let array_head_and_tail%0#0: bytes = myStatic#0 + let item_offset%0#0: uint64 = (* 0u 8u) + let tmp%0#0: bytes = (extract3 array_head_and_tail%0#0 item_offset%0#0 8u) // on error: Index access is out of bounds + let (popped%0#0: bytes, data%1#0: bytes) = _puya_lib.arc4.dynamic_array_pop_fixed_size(myArray#1, 8u) + let myArray#2: bytes = data%1#0 + let tmp%1#0: bool = (== tmp%0#0 popped%0#0) + (assert tmp%1#0) + let assigned_value%0#0: bytes = 0x0000000000000032 + let updated_target%0#0: bytes = (replace3 myStatic#0 8u assigned_value%0#0) + let myStatic#1: bytes = updated_target%0#0 + let result%5#0: bytes = (concat 0x n#0) + let result%6#0: bytes = (concat result%5#0 n#0) + let result%7#0: bytes = (concat result%6#0 n#0) + let array_data%2#0: bytes = (concat 0x result%7#0) + let myStatic2#0: bytes = array_data%2#0 + return + +subroutine tests/approvals/arc4-types.algo.ts::testAddress() -> void: + block@0: // L115 + let a#0: bytes = addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ + let b#0: bytes = (txn Sender) + let tmp%0#0: bool = (!= a#0 b#0) + (assert tmp%0#0) // Zero address should not match sender + let tmp%1#0: bool = (== a#0 addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ) + (assert tmp%1#0) // Two zero addresses should match + let array_head_and_tail%0#0: bytes = a#0 + let item_offset%0#0: uint64 = (* 0u 1u) + let tmp%2#0: bytes = (extract3 array_head_and_tail%0#0 item_offset%0#0 1u) // on error: Index access is out of bounds + let tmp%3#0: bool = (== tmp%2#0 0x00) + (assert tmp%3#0) // Zero address should start with zero byte + return + +subroutine tests/approvals/arc4-types.algo.ts::testTuple() -> void: + block@0: // L124 + let current_tail_offset%0#0: uint64 = 8u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 0x0000000000000022) + let t#0: bytes = encoded_tuple_buffer%1#0 + let firstItem#0: bytes = (extract3 t#0 0u 8u) // on error: Index access is out of bounds + let item0%0#0: bytes = (extract3 t#0 0u 8u) // on error: Index access is out of bounds + let firstItemIndexer#0: bytes = item0%0#0 + let tmp%0#0: bool = (== firstItem#0 firstItemIndexer#0) + (assert tmp%0#0) + let current_tail_offset%1#0: uint64 = 33u + let encoded_tuple_buffer%2#0: bytes = 0x + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 0x00) + let t1#0: bytes = encoded_tuple_buffer%4#0 + let tmp%1#0: bool = (== 2u 2u) + (assert tmp%1#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testDynamicBytes(someBytes: bytes) -> void: + block@0: // L75 + let db1#0: bytes = 0x0000 + let tmp%0#0: bytes = ((extract 2 0) db1#0) + let tmp%1#0: bool = (== tmp%0#0 0x) + (assert tmp%1#0) // No args should give empty bytes + let tmp%2#0: bool = (== db1#0 0x0000) + (assert tmp%2#0) // bytes prop should return length header (of 0) + let length%0#0: uint64 = (len someBytes#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 someBytes#0) + let db2#0: bytes = encoded_value%0#0 + let tmp%3#0: bytes = ((extract 2 0) db2#0) + let tmp%4#0: bool = (== tmp%3#0 someBytes#0) + (assert tmp%4#0) + let db3#0: bytes = 0x000568656c6c6f + let tmp%5#0: bytes = ((extract 2 0) db3#0) + let tmp%6#0: bool = (== tmp%5#0 "hello") + (assert tmp%6#0) + return + +subroutine tests/approvals/arc4-types.algo.ts::testStaticBytes() -> void: + block@0: // L86 + let s1#0: bytes = 0x + let s2#0: bytes = 0x00000000 + let s3#0: bytes = 0xaabbccddee + return + +subroutine _puya_lib.arc4.dynamic_array_pop_fixed_size(array: bytes, fixed_byte_size: uint64) -> : + block@0: // L44 + let array_length#0: uint64 = (extract_uint16 array#0 0u) + let length_minus_1#0: uint64 = (- array_length#0 1u) + let tmp%0#0: bytes = (itob length_minus_1#0) + let tmp%1#0: bytes = ((extract 6 0) tmp%0#0) + let result#0: bytes = ((replace2 0) array#0 tmp%1#0) + let tmp%2#0: uint64 = (len result#0) + let item_location#0: uint64 = (- tmp%2#0 fixed_byte_size#0) + let popped#0: bytes = (extract3 result#0 item_location#0 fixed_byte_size#0) + let result#1: bytes = (substring3 result#0 0u item_location#0) + return popped#0 result#1 \ No newline at end of file diff --git a/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.clear.0.ssa.ir b/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/arc4-types/Arc4TypesTestContract.ir/Arc4TypesTestContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/arc4-types/Arc4TypesTestContract.ssa.ir b/tests/approvals/out/arc4-types/Arc4TypesTestContract.ssa.ir deleted file mode 100644 index acd60576..00000000 --- a/tests/approvals/out/arc4-types/Arc4TypesTestContract.ssa.ir +++ /dev/null @@ -1,219 +0,0 @@ -contract tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract: - program approval: - subroutine tests/approvals/arc4-types.algo.ts::Arc4TypesTestContract.approvalProgram() -> bool: - block@0: // L138 - let x#0: bytes = 0x0000000000000000 - tests/approvals/arc4-types.algo.ts::testStr() - tests/approvals/arc4-types.algo.ts::testUintN(1u, 2b, 0x0000000000000000000000000000000000000000000000000000000000000004) - tests/approvals/arc4-types.algo.ts::testUFixed() - tests/approvals/arc4-types.algo.ts::testByte() - tests/approvals/arc4-types.algo.ts::testArrays(0x0000000000000041) - tests/approvals/arc4-types.algo.ts::testAddress() - tests/approvals/arc4-types.algo.ts::testTuple() - tests/approvals/arc4-types.algo.ts::testUFixed() - tests/approvals/arc4-types.algo.ts::testDynamicBytes("hmmmmmmmmm") - tests/approvals/arc4-types.algo.ts::testStaticBytes() - let array_data%0#0: bytes = (concat 0x0000 0x) - let result#0: bytes = array_data%0#0 - let tmp%0#0: uint64 = (extract_uint16 result#0 0u) - let tmp%1#0: bool = (== tmp%0#0 0u) - (assert tmp%1#0) - return 1u - - subroutine tests/approvals/arc4-types.algo.ts::testStr() -> void: - block@0: // L62 - let s1#0: bytes = 0x0000 - let tmp%0#0: bool = (== s1#0 0x0000) - (assert tmp%0#0) // Empty string should equal the uint16 length prefix - let s2#0: bytes = 0x000548656c6c6f - let tmp%1#0: bytes = ((extract 2 0) s2#0) - let tmp%2#0: bool = (== tmp%1#0 "Hello") - (assert tmp%2#0) - let s2_bytes#0: bytes = s2#0 - let s2_from_bytes#0: bytes = s2_bytes#0 - let tmp%3#0: bool = (== s2#0 s2_from_bytes#0) - (assert tmp%3#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testUintN(n: uint64, b: biguint, c: bytes) -> void: - block@0: // L27 - let x#0: bytes = 0x04 - let tmp%0#0: uint64 = (len x#0) - let tmp%1#0: bool = (== tmp%0#0 1u) - (assert tmp%1#0) - let x2#0: bytes = 0xff - let tmp%2#0: bool = (== x2#0 0xff) - (assert tmp%2#0) - let y#0: bytes = 0x0000 - let tmp%3#0: uint64 = (len y#0) - let tmp%4#0: bool = (== tmp%3#0 2u) - (assert tmp%4#0) - let val_as_bytes%0#0: bytes = (itob n#0) - let z#0: bytes = ((extract 7 1) val_as_bytes%0#0) - let z_native#0: uint64 = (btoi z#0) - let tmp%5#0: bool = (== z_native#0 n#0) - (assert tmp%5#0) - let big128#0: bytes = 0x00000010000000000000000000000000 - let len_%0#0: uint64 = (len b#0) - let no_overflow%0#0: bool = (<= len_%0#0 16u) - (assert no_overflow%0#0) // overflow - let b_zeros%0#0: bytes = (bzero 16u) - let a#0: bytes = (b| b#0 b_zeros%0#0) - let a_native#0: biguint = a#0 - let tmp%6#0: bool = (b== a_native#0 b#0) - (assert tmp%6#0) - let tmp%7#0: uint64 = (len c#0) - let tmp%8#0: bool = (== tmp%7#0 32u) - (assert tmp%8#0) - let a_bytes#0: bytes = a#0 - let a_from_bytes#0: bytes = a_bytes#0 - let tmp%9#0: bool = (== a_from_bytes#0 a#0) - (assert tmp%9#0) - let aliased64#0: bytes = 0x000000000000000c - let tmp%10#0: uint64 = (btoi aliased64#0) - let tmp%11#0: bool = (== tmp%10#0 12u) - (assert tmp%11#0) - let aliased32#0: bytes = 0x0000c571 - let reinterpret_biguint%0#0: biguint = aliased32#0 - let tmp%12#0: bool = (b== reinterpret_biguint%0#0 50545b) - (assert tmp%12#0) - let byte#0: bytes = 0xff - let tmp%13#0: bytes = (b~ byte#0) - let tmp%14#0: bool = (== tmp%13#0 0x00) - (assert tmp%14#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testUFixed() -> void: - block@0: // L20 - let a#0: bytes = 0x000004dc - let c#0: bytes = 0x000004dc - let tmp%0#0: bool = (== a#0 c#0) - (assert tmp%0#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testByte() -> void: - block@0: // L109 - let b#0: bytes = 0x00 - let b2#0: bytes = 0x00 - let tmp%0#0: bool = (== b#0 b2#0) - (assert tmp%0#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testArrays(n: bytes) -> void: - block@0: // L95 - let result%0#0: bytes = (concat 0x n#0) - let result%1#0: bytes = (concat result%0#0 n#0) - let result%2#0: bytes = (concat result%1#0 n#0) - let array_data%0#0: bytes = (concat 0x0003 result%2#0) - let myArray#0: bytes = array_data%0#0 - let expr_value_trimmed%0#0: bytes = ((extract 2 0) myArray#0) - let data%0#0: bytes = (concat 0x n#0) - let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) - let byte_len%0#0: uint64 = (len concatenated%0#0) - let len_%0#0: uint64 = (/ byte_len%0#0 8u) - let as_bytes%0#0: bytes = (itob len_%0#0) - let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) - let myArray#1: bytes = concat_result%0#0 - let result%3#0: bytes = (concat 0x n#0) - let result%4#0: bytes = (concat result%3#0 n#0) - let array_data%1#0: bytes = (concat 0x result%4#0) - let myStatic#0: bytes = array_data%1#0 - let array_head_and_tail%0#0: bytes = myStatic#0 - let item_offset%0#0: uint64 = (* 0u 8u) - let tmp%0#0: bytes = (extract3 array_head_and_tail%0#0 item_offset%0#0 8u) // on error: Index access is out of bounds - let (popped%0#0: bytes, data%1#0: bytes) = _puya_lib.arc4.dynamic_array_pop_fixed_size(myArray#1, 8u) - let myArray#2: bytes = data%1#0 - let tmp%1#0: bool = (== tmp%0#0 popped%0#0) - (assert tmp%1#0) - let assigned_value%0#0: bytes = 0x0000000000000032 - let updated_target%0#0: bytes = (replace3 myStatic#0 8u assigned_value%0#0) - let myStatic#1: bytes = updated_target%0#0 - let result%5#0: bytes = (concat 0x n#0) - let result%6#0: bytes = (concat result%5#0 n#0) - let result%7#0: bytes = (concat result%6#0 n#0) - let array_data%2#0: bytes = (concat 0x result%7#0) - let myStatic2#0: bytes = array_data%2#0 - return - - subroutine tests/approvals/arc4-types.algo.ts::testAddress() -> void: - block@0: // L115 - let a#0: bytes = addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ - let b#0: bytes = (txn Sender) - let tmp%0#0: bool = (!= a#0 b#0) - (assert tmp%0#0) // Zero address should not match sender - let tmp%1#0: bool = (== a#0 addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ) - (assert tmp%1#0) // Two zero addresses should match - let array_head_and_tail%0#0: bytes = a#0 - let item_offset%0#0: uint64 = (* 0u 1u) - let tmp%2#0: bytes = (extract3 array_head_and_tail%0#0 item_offset%0#0 1u) // on error: Index access is out of bounds - let tmp%3#0: bool = (== tmp%2#0 0x00) - (assert tmp%3#0) // Zero address should start with zero byte - return - - subroutine tests/approvals/arc4-types.algo.ts::testTuple() -> void: - block@0: // L124 - let current_tail_offset%0#0: uint64 = 8u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 0x0000000000000022) - let t#0: bytes = encoded_tuple_buffer%1#0 - let firstItem#0: bytes = (extract3 t#0 0u 8u) // on error: Index access is out of bounds - let item0%0#0: bytes = (extract3 t#0 0u 8u) // on error: Index access is out of bounds - let firstItemIndexer#0: bytes = item0%0#0 - let tmp%0#0: bool = (== firstItem#0 firstItemIndexer#0) - (assert tmp%0#0) - let current_tail_offset%1#0: uint64 = 33u - let encoded_tuple_buffer%2#0: bytes = 0x - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 addr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 0x00) - let t1#0: bytes = encoded_tuple_buffer%4#0 - let tmp%1#0: bool = (== 2u 2u) - (assert tmp%1#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testDynamicBytes(someBytes: bytes) -> void: - block@0: // L75 - let db1#0: bytes = 0x0000 - let tmp%0#0: bytes = ((extract 2 0) db1#0) - let tmp%1#0: bool = (== tmp%0#0 0x) - (assert tmp%1#0) // No args should give empty bytes - let tmp%2#0: bool = (== db1#0 0x0000) - (assert tmp%2#0) // bytes prop should return length header (of 0) - let length%0#0: uint64 = (len someBytes#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 someBytes#0) - let db2#0: bytes = encoded_value%0#0 - let tmp%3#0: bytes = ((extract 2 0) db2#0) - let tmp%4#0: bool = (== tmp%3#0 someBytes#0) - (assert tmp%4#0) - let db3#0: bytes = 0x000568656c6c6f - let tmp%5#0: bytes = ((extract 2 0) db3#0) - let tmp%6#0: bool = (== tmp%5#0 "hello") - (assert tmp%6#0) - return - - subroutine tests/approvals/arc4-types.algo.ts::testStaticBytes() -> void: - block@0: // L86 - let s1#0: bytes = 0x - let s2#0: bytes = 0x00000000 - let s3#0: bytes = 0xaabbccddee - return - - subroutine _puya_lib.arc4.dynamic_array_pop_fixed_size(array: bytes, fixed_byte_size: uint64) -> : - block@0: // L44 - let array_length#0: uint64 = (extract_uint16 array#0 0u) - let length_minus_1#0: uint64 = (- array_length#0 1u) - let tmp%0#0: bytes = (itob length_minus_1#0) - let tmp%1#0: bytes = ((extract 6 0) tmp%0#0) - let result#0: bytes = ((replace2 0) array#0 tmp%1#0) - let tmp%2#0: uint64 = (len result#0) - let item_location#0: uint64 = (- tmp%2#0 fixed_byte_size#0) - let popped#0: bytes = (extract3 result#0 item_location#0 fixed_byte_size#0) - let result#1: bytes = (substring3 result#0 0u item_location#0) - return popped#0 result#1 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/assert-match/AssertMatchContract.approval.teal b/tests/approvals/out/assert-match/AssertMatchContract.approval.teal index 3a63025d..e8141b8f 100644 --- a/tests/approvals/out/assert-match/AssertMatchContract.approval.teal +++ b/tests/approvals/out/assert-match/AssertMatchContract.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/assert-match.algo.ts::AssertMatchContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/assert-match.algo.ts:4 // export class AssertMatchContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/assert-match.algo.ts:4 + // export class AssertMatchContract extends Contract { txna ApplicationArgs 0 pushbytes 0x8fef7668 // method "testPay(pay)bool" swap - match __puya_arc4_router___testPay_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_testPay_route@3 + +main_switch_case_default@4: + +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/assert-match.algo.ts:4 + // export class AssertMatchContract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__@11: + return -__puya_arc4_router___testPay_route@2: +main_testPay_route@3: // tests/approvals/assert-match.algo.ts:5 // public testPay(pay: gtxn.PaymentTxn): boolean { txn OnCompletion @@ -54,21 +66,22 @@ __puya_arc4_router___testPay_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/assert-match.algo.ts:4 // export class AssertMatchContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/assert-match.algo.ts:4 // export class AssertMatchContract extends Contract { txn ApplicationID @@ -77,15 +90,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/assert-match.algo.ts:4 - // export class AssertMatchContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__@11 // tests/approvals/assert-match.algo.ts::AssertMatchContract.testPay(pay: uint64) -> uint64: @@ -118,6 +123,17 @@ testPay: // }) <= bz testPay_bool_false@8 + +testPay_and_contd@1: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns Amount // tests/approvals/assert-match.algo.ts:7 @@ -134,6 +150,17 @@ testPay: // }) >= bz testPay_bool_false@8 + +testPay_and_contd@2: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns Sender // tests/approvals/assert-match.algo.ts:8 @@ -150,6 +177,17 @@ testPay: // }) == bz testPay_bool_false@8 + +testPay_and_contd@3: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns Receiver // tests/approvals/assert-match.algo.ts:9 @@ -166,6 +204,17 @@ testPay: // }) == bz testPay_bool_false@8 + +testPay_and_contd@4: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns CloseRemainderTo // tests/approvals/assert-match.algo.ts:10 @@ -182,6 +231,17 @@ testPay: // }) == bz testPay_bool_false@8 + +testPay_and_contd@5: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns FirstValid // tests/approvals/assert-match.algo.ts:11 @@ -198,6 +258,17 @@ testPay: // }) > bz testPay_bool_false@8 + +testPay_and_contd@6: + // tests/approvals/assert-match.algo.ts:6-13 + // assertMatch(pay, { + // amount: { between: [100_000, 105_000] }, + // sender: Txn.sender, + // receiver: Global.currentApplicationAddress, + // closeRemainderTo: Global.zeroAddress, + // firstValid: { greaterThan: 1 }, + // lastValid: { lessThan: 2 ** 40 }, + // }) frame_dig -1 gtxns LastValid // tests/approvals/assert-match.algo.ts:12 @@ -214,11 +285,9 @@ testPay: // }) < bz testPay_bool_false@8 - intc_1 // 1 - b testPay_bool_merge@9 -testPay_bool_false@8: - intc_0 // 0 +testPay_bool_true@7: + intc_1 // 1 testPay_bool_merge@9: // tests/approvals/assert-match.algo.ts:6-13 @@ -236,6 +305,10 @@ testPay_bool_merge@9: intc_1 // 1 retsub +testPay_bool_false@8: + intc_0 // 0 + b testPay_bool_merge@9 + // tests/approvals/assert-match.algo.ts::AssertMatchContract.__algots__.defaultCreate() -> void: __algots__.defaultCreate: diff --git a/tests/approvals/out/assert-match/AssertMatchContract.arc32.json b/tests/approvals/out/assert-match/AssertMatchContract.arc32.json index 51fd3f54..1124325c 100644 --- a/tests/approvals/out/assert-match/AssertMatchContract.arc32.json +++ b/tests/approvals/out/assert-match/AssertMatchContract.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OkFzc2VydE1hdGNoQ29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDhmZWY3NjY4IC8vIG1ldGhvZCAidGVzdFBheShwYXkpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RQYXlfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RQYXlfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NQogICAgLy8gcHVibGljIHRlc3RQYXkocGF5OiBndHhuLlBheW1lbnRUeG4pOiBib29sZWFuIHsKICAgIGNhbGxzdWIgdGVzdFBheQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0LnRlc3RQYXkocGF5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdFBheToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTA1MDAwIC8vIDEwNTAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPD0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTAwMDAwIC8vIDEwMDAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPj0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjgKICAgIC8vIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID09CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjEwCiAgICAvLyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID09CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBGaXJzdFZhbGlkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6MTEKICAgIC8vIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIGludGNfMSAvLyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA+CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMgogICAgLy8gbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPAogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3RQYXlfYm9vbF9tZXJnZUA5Cgp0ZXN0UGF5X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCgp0ZXN0UGF5X2Jvb2xfbWVyZ2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6MTQKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OkFzc2VydE1hdGNoQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4ZmVmNzY2OCAvLyBtZXRob2QgInRlc3RQYXkocGF5KWJvb2wiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3RQYXlfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3Rlc3RQYXlfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NQogICAgLy8gcHVibGljIHRlc3RQYXkocGF5OiBndHhuLlBheW1lbnRUeG4pOiBib29sZWFuIHsKICAgIGNhbGxzdWIgdGVzdFBheQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0LnRlc3RQYXkocGF5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdFBheToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTA1MDAwIC8vIDEwNTAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPD0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo3CiAgICAvLyBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICBwdXNoaW50IDEwMDAwMCAvLyAxMDAwMDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID49CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAoKdGVzdFBheV9hbmRfY29udGRAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OAogICAgLy8gc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPT0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYW5kX2NvbnRkQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMAogICAgLy8gY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYW5kX2NvbnRkQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEZpcnN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMQogICAgLy8gZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID4KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMgogICAgLy8gbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPAogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYm9vbF90cnVlQDc6CiAgICBpbnRjXzEgLy8gMQoKdGVzdFBheV9ib29sX21lcmdlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjE0CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKdGVzdFBheV9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiB0ZXN0UGF5X2Jvb2xfbWVyZ2VAOQoKCi8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo6QXNzZXJ0TWF0Y2hDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/assert-match/AssertMatchContract.arc56.json b/tests/approvals/out/assert-match/AssertMatchContract.arc56.json index 1767d1aa..87c01fbe 100644 --- a/tests/approvals/out/assert-match/AssertMatchContract.arc56.json +++ b/tests/approvals/out/assert-match/AssertMatchContract.arc56.json @@ -62,31 +62,31 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 189 + 176 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ - 95 + 86 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 55 + 47 ], "errorMessage": "transaction type is pay" } @@ -99,8 +99,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OkFzc2VydE1hdGNoQ29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDhmZWY3NjY4IC8vIG1ldGhvZCAidGVzdFBheShwYXkpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RQYXlfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RQYXlfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NQogICAgLy8gcHVibGljIHRlc3RQYXkocGF5OiBndHhuLlBheW1lbnRUeG4pOiBib29sZWFuIHsKICAgIGNhbGxzdWIgdGVzdFBheQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0LnRlc3RQYXkocGF5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdFBheToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTA1MDAwIC8vIDEwNTAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPD0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTAwMDAwIC8vIDEwMDAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPj0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjgKICAgIC8vIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID09CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjEwCiAgICAvLyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID09CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBGaXJzdFZhbGlkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6MTEKICAgIC8vIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIGludGNfMSAvLyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA+CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMgogICAgLy8gbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPAogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3RQYXlfYm9vbF9tZXJnZUA5Cgp0ZXN0UGF5X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCgp0ZXN0UGF5X2Jvb2xfbWVyZ2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6MTQKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OkFzc2VydE1hdGNoQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4ZmVmNzY2OCAvLyBtZXRob2QgInRlc3RQYXkocGF5KWJvb2wiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3RQYXlfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3Rlc3RQYXlfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NQogICAgLy8gcHVibGljIHRlc3RQYXkocGF5OiBndHhuLlBheW1lbnRUeG4pOiBib29sZWFuIHsKICAgIGNhbGxzdWIgdGVzdFBheQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBc3NlcnRNYXRjaENvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXNzZXJ0TWF0Y2hDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjpBc3NlcnRNYXRjaENvbnRyYWN0LnRlc3RQYXkocGF5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdFBheToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo1CiAgICAvLyBwdWJsaWMgdGVzdFBheShwYXk6IGd0eG4uUGF5bWVudFR4bik6IGJvb2xlYW4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjcKICAgIC8vIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIHB1c2hpbnQgMTA1MDAwIC8vIDEwNTAwMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPD0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEAxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBbW91bnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo3CiAgICAvLyBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICBwdXNoaW50IDEwMDAwMCAvLyAxMDAwMDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID49CiAgICBieiB0ZXN0UGF5X2Jvb2xfZmFsc2VAOAoKdGVzdFBheV9hbmRfY29udGRAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6OAogICAgLy8gc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPT0KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYW5kX2NvbnRkQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMAogICAgLy8gY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICA9PQogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYW5kX2NvbnRkQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEZpcnN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMQogICAgLy8gZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo2LTEzCiAgICAvLyBhc3NlcnRNYXRjaChwYXksIHsKICAgIC8vICAgYW1vdW50OiB7IGJldHdlZW46IFsxMDBfMDAwLCAxMDVfMDAwXSB9LAogICAgLy8gICBzZW5kZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLnplcm9BZGRyZXNzLAogICAgLy8gICBmaXJzdFZhbGlkOiB7IGdyZWF0ZXJUaGFuOiAxIH0sCiAgICAvLyAgIGxhc3RWYWxpZDogeyBsZXNzVGhhbjogMiAqKiA0MCB9LAogICAgLy8gfSkKICAgID4KICAgIGJ6IHRlc3RQYXlfYm9vbF9mYWxzZUA4Cgp0ZXN0UGF5X2FuZF9jb250ZEA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0VmFsaWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czoxMgogICAgLy8gbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjYtMTMKICAgIC8vIGFzc2VydE1hdGNoKHBheSwgewogICAgLy8gICBhbW91bnQ6IHsgYmV0d2VlbjogWzEwMF8wMDAsIDEwNV8wMDBdIH0sCiAgICAvLyAgIHNlbmRlcjogVHhuLnNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuemVyb0FkZHJlc3MsCiAgICAvLyAgIGZpcnN0VmFsaWQ6IHsgZ3JlYXRlclRoYW46IDEgfSwKICAgIC8vICAgbGFzdFZhbGlkOiB7IGxlc3NUaGFuOiAyICoqIDQwIH0sCiAgICAvLyB9KQogICAgPAogICAgYnogdGVzdFBheV9ib29sX2ZhbHNlQDgKCnRlc3RQYXlfYm9vbF90cnVlQDc6CiAgICBpbnRjXzEgLy8gMQoKdGVzdFBheV9ib29sX21lcmdlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6Ni0xMwogICAgLy8gYXNzZXJ0TWF0Y2gocGF5LCB7CiAgICAvLyAgIGFtb3VudDogeyBiZXR3ZWVuOiBbMTAwXzAwMCwgMTA1XzAwMF0gfSwKICAgIC8vICAgc2VuZGVyOiBUeG4uc2VuZGVyLAogICAgLy8gICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIGNsb3NlUmVtYWluZGVyVG86IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgZmlyc3RWYWxpZDogeyBncmVhdGVyVGhhbjogMSB9LAogICAgLy8gICBsYXN0VmFsaWQ6IHsgbGVzc1RoYW46IDIgKiogNDAgfSwKICAgIC8vIH0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2Fzc2VydC1tYXRjaC5hbGdvLnRzOjE0CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKdGVzdFBheV9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiB0ZXN0UGF5X2Jvb2xfbWVyZ2VAOQoKCi8vIHRlc3RzL2FwcHJvdmFscy9hc3NlcnQtbWF0Y2guYWxnby50czo6QXNzZXJ0TWF0Y2hDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXNzZXJ0LW1hdGNoLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFzc2VydE1hdGNoQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQA7NhoAgASP73ZoTI4BAAIiQzEZIhJEMRgiE0QxFiMJSTgQIxJEiAArgAEAIk8CVIAEFR98dUxQsCNC/9QxGSJMjgEAA0L/yDEYIhJEiABdI0L/vYoBAYv/OAiBqLQGDkEARov/OAiBoI0GD0EAOov/OAAxABJBADCL/zgHMgoSQQAmi/84CTIDEkEAHIv/OAIjDUEAE4v/OASBgICAgIAgDEEABCNEI4kiQv/5igAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/assert-match/AssertMatchContract.clear.teal b/tests/approvals/out/assert-match/AssertMatchContract.clear.teal index 54c7e9df..a4d58047 100644 --- a/tests/approvals/out/assert-match/AssertMatchContract.clear.teal +++ b/tests/approvals/out/assert-match/AssertMatchContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/assert-match.algo.ts::AssertMatchContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.approval.0.ssa.ir b/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.approval.0.ssa.ir new file mode 100644 index 00000000..12976897 --- /dev/null +++ b/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.approval.0.ssa.ir @@ -0,0 +1,96 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "testPay(pay)bool" => block@2, * => block@3} + block@2: // testPay_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: uint64 = (txn GroupIndex) + let gtxn_idx%0#0: uint64 = (- tmp%7#0 1u) + let gtxn_type%0#0: uint64 = ((gtxns TypeEnum) gtxn_idx%0#0) + let gtxn_type_matches%0#0: bool = (== gtxn_type%0#0 pay) + (assert gtxn_type_matches%0#0) // transaction type is pay + let to_encode%0#0: bool = tests/approvals/assert-match.algo.ts::AssertMatchContract.testPay(gtxn_idx%0#0) + let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) + let tmp%8#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) + (log tmp%8#0) + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%9#0: uint64 = (txn OnCompletion) + switch tmp%9#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L4 + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (== tmp%10#0 0u) + (assert tmp%11#0) // can only call when creating + tests/approvals/assert-match.algo.ts::AssertMatchContract.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + +subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.testPay(pay: uint64) -> bool: + block@0: // L5 + let tmp%0#0: uint64 = ((gtxns Amount) pay#0) + let tmp%1#0: bool = (<= tmp%0#0 105000u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // and_contd_L6 + let tmp%2#0: uint64 = ((gtxns Amount) pay#0) + let tmp%3#0: bool = (>= tmp%2#0 100000u) + goto tmp%3#0 ? block@2 : block@8 + block@2: // and_contd_L6 + let tmp%4#0: bytes = ((gtxns Sender) pay#0) + let tmp%5#0: bytes = (txn Sender) + let tmp%6#0: bool = (== tmp%4#0 tmp%5#0) + goto tmp%6#0 ? block@3 : block@8 + block@3: // and_contd_L6 + let tmp%7#0: bytes = ((gtxns Receiver) pay#0) + let tmp%8#0: bytes = (global CurrentApplicationAddress) + let tmp%9#0: bool = (== tmp%7#0 tmp%8#0) + goto tmp%9#0 ? block@4 : block@8 + block@4: // and_contd_L6 + let tmp%10#0: bytes = ((gtxns CloseRemainderTo) pay#0) + let tmp%11#0: bytes = (global ZeroAddress) + let tmp%12#0: bool = (== tmp%10#0 tmp%11#0) + goto tmp%12#0 ? block@5 : block@8 + block@5: // and_contd_L6 + let tmp%13#0: uint64 = ((gtxns FirstValid) pay#0) + let tmp%14#0: bool = (> tmp%13#0 1u) + goto tmp%14#0 ? block@6 : block@8 + block@6: // and_contd_L6 + let tmp%15#0: uint64 = ((gtxns LastValid) pay#0) + let tmp%16#0: bool = (< tmp%15#0 1099511627776u) + goto tmp%16#0 ? block@7 : block@8 + block@7: // bool_true_L6 + let and_result%0#0: bool = 1u + goto block@9 + block@8: // bool_false_L6 + let and_result%0#1: bool = 0u + goto block@9 + block@9: // bool_merge_L6 + let and_result%0#2: bool = φ(and_result%0#0 <- block@7, and_result%0#1 <- block@8) + (assert and_result%0#2) // assert target is match for conditions + return 1u + +subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.clear.0.ssa.ir b/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/assert-match/AssertMatchContract.ir/AssertMatchContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/assert-match/AssertMatchContract.ssa.ir b/tests/approvals/out/assert-match/AssertMatchContract.ssa.ir deleted file mode 100644 index 2123da07..00000000 --- a/tests/approvals/out/assert-match/AssertMatchContract.ssa.ir +++ /dev/null @@ -1,103 +0,0 @@ -contract tests/approvals/assert-match.algo.ts::AssertMatchContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "testPay(pay)bool" => block@2, * => block@3} - block@2: // testPay_route_L5 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: uint64 = (txn GroupIndex) - let gtxn_idx%0#0: uint64 = (- tmp%7#0 1u) - let gtxn_type%0#0: uint64 = ((gtxns TypeEnum) gtxn_idx%0#0) - let gtxn_type_matches%0#0: bool = (== gtxn_type%0#0 pay) - (assert gtxn_type_matches%0#0) // transaction type is pay - let to_encode%0#0: bool = tests/approvals/assert-match.algo.ts::AssertMatchContract.testPay(gtxn_idx%0#0) - let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) - let tmp%8#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) - (log tmp%8#0) - return 1u - block@3: // switch_case_default_L4 - goto block@4 - block@4: // switch_case_next_L4 - goto block@9 - block@5: // bare_routing_L4 - let tmp%9#0: uint64 = (txn OnCompletion) - switch tmp%9#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L4 - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (== tmp%10#0 0u) - (assert tmp%11#0) // can only call when creating - tests/approvals/assert-match.algo.ts::AssertMatchContract.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L4 - goto block@8 - block@8: // switch_case_next_L4 - goto block@9 - block@9: // after_if_else_L4 - return 0u - - subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.testPay(pay: uint64) -> bool: - block@0: // L5 - let tmp%0#0: uint64 = ((gtxns Amount) pay#0) - let tmp%1#0: bool = (<= tmp%0#0 105000u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // and_contd_L6 - let tmp%2#0: uint64 = ((gtxns Amount) pay#0) - let tmp%3#0: bool = (>= tmp%2#0 100000u) - goto tmp%3#0 ? block@2 : block@8 - block@2: // and_contd_L6 - let tmp%4#0: bytes = ((gtxns Sender) pay#0) - let tmp%5#0: bytes = (txn Sender) - let tmp%6#0: bool = (== tmp%4#0 tmp%5#0) - goto tmp%6#0 ? block@3 : block@8 - block@3: // and_contd_L6 - let tmp%7#0: bytes = ((gtxns Receiver) pay#0) - let tmp%8#0: bytes = (global CurrentApplicationAddress) - let tmp%9#0: bool = (== tmp%7#0 tmp%8#0) - goto tmp%9#0 ? block@4 : block@8 - block@4: // and_contd_L6 - let tmp%10#0: bytes = ((gtxns CloseRemainderTo) pay#0) - let tmp%11#0: bytes = (global ZeroAddress) - let tmp%12#0: bool = (== tmp%10#0 tmp%11#0) - goto tmp%12#0 ? block@5 : block@8 - block@5: // and_contd_L6 - let tmp%13#0: uint64 = ((gtxns FirstValid) pay#0) - let tmp%14#0: bool = (> tmp%13#0 1u) - goto tmp%14#0 ? block@6 : block@8 - block@6: // and_contd_L6 - let tmp%15#0: uint64 = ((gtxns LastValid) pay#0) - let tmp%16#0: bool = (< tmp%15#0 1099511627776u) - goto tmp%16#0 ? block@7 : block@8 - block@7: // bool_true_L6 - let and_result%0#0: bool = 1u - goto block@9 - block@8: // bool_false_L6 - let and_result%0#1: bool = 0u - goto block@9 - block@9: // bool_merge_L6 - let and_result%0#2: bool = φ(and_result%0#0 <- block@7, and_result%0#1 <- block@8) - (assert and_result%0#2) // assert target is match for conditions - return 1u - - subroutine tests/approvals/assert-match.algo.ts::AssertMatchContract.__algots__.defaultCreate() -> void: - block@0: // L4 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11Contract.approval.teal b/tests/approvals/out/avm11/AVM11Contract.approval.teal index a24e97f8..1233401b 100644 --- a/tests/approvals/out/avm11/AVM11Contract.approval.teal +++ b/tests/approvals/out/avm11/AVM11Contract.approval.teal @@ -1,28 +1,42 @@ #pragma version 11 +#pragma typetrack false -tests/approvals/avm11.algo.ts::Avm11Contract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/avm11.algo.ts:11-12 // @contract({ name: 'AVM11Contract', avmVersion: 11 }) // export class Avm11Contract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/avm11.algo.ts:11-12 + // @contract({ name: 'AVM11Contract', avmVersion: 11 }) + // export class Avm11Contract extends Contract { txna ApplicationArgs 0 pushbytes 0x52448a31 // method "testNewOps()void" swap - match __puya_arc4_router___testNewOps_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_testNewOps_route@3 + +main_switch_case_default@4: -__puya_arc4_router___testNewOps_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/avm11.algo.ts:11-12 + // @contract({ name: 'AVM11Contract', avmVersion: 11 }) + // export class Avm11Contract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__@11: + return + +main_testNewOps_route@3: // tests/approvals/avm11.algo.ts:13 // testNewOps() { txn OnCompletion @@ -35,22 +49,23 @@ __puya_arc4_router___testNewOps_route@2: assert // can only call when not creating callsub testNewOps intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__@11 -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 - -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/avm11.algo.ts:11-12 // @contract({ name: 'AVM11Contract', avmVersion: 11 }) // export class Avm11Contract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 + +main_switch_case_default@8: -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/avm11.algo.ts:11-12 // @contract({ name: 'AVM11Contract', avmVersion: 11 }) // export class Avm11Contract extends Contract { @@ -60,16 +75,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/avm11.algo.ts:11-12 - // @contract({ name: 'AVM11Contract', avmVersion: 11 }) - // export class Avm11Contract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__@11 // tests/approvals/avm11.algo.ts::Avm11Contract.testNewOps() -> void: diff --git a/tests/approvals/out/avm11/AVM11Contract.arc32.json b/tests/approvals/out/avm11/AVM11Contract.arc32.json index 1bfc3f2c..11fafc3c 100644 --- a/tests/approvals/out/avm11/AVM11Contract.arc32.json +++ b/tests/approvals/out/avm11/AVM11Contract.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCgp0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MjQ0OGEzMSAvLyBtZXRob2QgInRlc3ROZXdPcHMoKXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0TmV3T3BzX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0TmV3T3BzX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMwogICAgLy8gdGVzdE5ld09wcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdE5ld09wcwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjpBdm0xMUNvbnRyYWN0LnRlc3ROZXdPcHMoKSAtPiB2b2lkOgp0ZXN0TmV3T3BzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTMKICAgIC8vIHRlc3ROZXdPcHMoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQoIW9wLmZhbGNvblZlcmlmeShCeXRlcygpLCBCeXRlcygpLCBvcC5iemVybygxNzkzKSkpCiAgICBwdXNoaW50IDE3OTMgLy8gMTc5MwogICAgYnplcm8KICAgIHB1c2hieXRlcyAweAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGZhbGNvbl92ZXJpZnkKICAgICEKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5zdW1oYXNoNTEyKEJ5dGVzKCkpKQogICAgcHVzaGJ5dGVzIDB4CiAgICBzdW1oYXNoNTEyCiAgICBsZW4KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5vbmxpbmVTdGFrZSgpKQogICAgb25saW5lX3N0YWtlCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI1CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrUHJvcG9zZXIoMCkgIT09IEdsb2JhbC56ZXJvQWRkcmVzcywgJ3Byb3Bvc2VyJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtQcm9wb3NlcgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIHByb3Bvc2VyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyNgogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0ZlZXNDb2xsZWN0ZWQoMCksICdmZWVzIGNvbGxlY3RlZCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrRmVlc0NvbGxlY3RlZAogICAgYXNzZXJ0IC8vIGZlZXMgY29sbGVjdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0JvbnVzKDApLCAnYm9udXMnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa0JvbnVzCiAgICBhc3NlcnQgLy8gYm9udXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrQnJhbmNoKDApLCAnYnJhbmNoJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtCcmFuY2gKICAgIGxlbgogICAgYXNzZXJ0IC8vIGJyYW5jaAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtGZWVTaW5rKDApICE9PSBHbG9iYWwuemVyb0FkZHJlc3MsICdmZWUgc2luaycpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrRmVlU2luawogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIGZlZSBzaW5rCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMAogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1Byb3RvY29sKDApLCAncHJvdG9jb2wnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1Byb3RvY29sCiAgICBsZW4KICAgIGFzc2VydCAvLyBwcm90b2NvbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzEKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtUeG5Db3VudGVyKDApLCAndHhuIGNvdW50ZXInKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1R4bkNvdW50ZXIKICAgIGFzc2VydCAvLyB0eG4gY291bnRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzIKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtQcm9wb3NlclBheW91dCgwKSwgJ3Byb3Bvc2VyIHBheW91dCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrUHJvcG9zZXJQYXlvdXQKICAgIGFzc2VydCAvLyBwcm9wb3NlciBwYXlvdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM1CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNFbmFibGVkLCAncGF5b3V0c19lbmFibGVkJykKICAgIGdsb2JhbCBQYXlvdXRzRW5hYmxlZAogICAgYXNzZXJ0IC8vIHBheW91dHNfZW5hYmxlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c0dvT25saW5lRmVlLCAncGF5b3V0c19nb19vbmxpbmVfZmVlJykKICAgIGdsb2JhbCBQYXlvdXRzR29PbmxpbmVGZWUKICAgIGFzc2VydCAvLyBwYXlvdXRzX2dvX29ubGluZV9mZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNQZXJjZW50LCAncGF5b3V0c19wZXJjZW50JykKICAgIGdsb2JhbCBQYXlvdXRzUGVyY2VudAogICAgYXNzZXJ0IC8vIHBheW91dHNfcGVyY2VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzgKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c01pbkJhbGFuY2UsICdwYXlvdXRzX21pbl9iYWxhbmNlJykKICAgIGdsb2JhbCBQYXlvdXRzTWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIHBheW91dHNfbWluX2JhbGFuY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM5CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNNYXhCYWxhbmNlLCAncGF5b3V0c19tYXhfYmFsYW5jZScpCiAgICBnbG9iYWwgUGF5b3V0c01heEJhbGFuY2UKICAgIGFzc2VydCAvLyBwYXlvdXRzX21heF9iYWxhbmNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo0MQogICAgLy8gY29uc3QgW2csIGhdID0gb3AuVm90ZXJQYXJhbXMudm90ZXJCYWxhbmNlKDApCiAgICBpbnRjXzAgLy8gMAogICAgdm90ZXJfcGFyYW1zX2dldCBWb3RlckJhbGFuY2UKICAgIHBvcG4gMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6NDIKICAgIC8vIGNvbnN0IFtpLCBqXSA9IG9wLlZvdGVyUGFyYW1zLnZvdGVySW5jZW50aXZlRWxpZ2libGUoMCkKICAgIGludGNfMCAvLyAwCiAgICB2b3Rlcl9wYXJhbXNfZ2V0IFZvdGVySW5jZW50aXZlRWxpZ2libGUKICAgIHBvcG4gMgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCgp0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MjQ0OGEzMSAvLyBtZXRob2QgInRlc3ROZXdPcHMoKXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3ROZXdPcHNfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjExLTEyCiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQVZNMTFDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQXZtMTFDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTE6CiAgICByZXR1cm4KCm1haW5fdGVzdE5ld09wc19yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTMKICAgIC8vIHRlc3ROZXdPcHMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3ROZXdPcHMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMQoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjExLTEyCiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQVZNMTFDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQXZtMTFDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjpBdm0xMUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QudGVzdE5ld09wcygpIC0+IHZvaWQ6CnRlc3ROZXdPcHM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMwogICAgLy8gdGVzdE5ld09wcygpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTUKICAgIC8vIGFzc2VydCghb3AuZmFsY29uVmVyaWZ5KEJ5dGVzKCksIEJ5dGVzKCksIG9wLmJ6ZXJvKDE3OTMpKSkKICAgIHB1c2hpbnQgMTc5MyAvLyAxNzkzCiAgICBiemVybwogICAgcHVzaGJ5dGVzIDB4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZmFsY29uX3ZlcmlmeQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLnN1bWhhc2g1MTIoQnl0ZXMoKSkpCiAgICBwdXNoYnl0ZXMgMHgKICAgIHN1bWhhc2g1MTIKICAgIGxlbgogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLm9ubGluZVN0YWtlKCkpCiAgICBvbmxpbmVfc3Rha2UKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjUKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtQcm9wb3NlcigwKSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzLCAncHJvcG9zZXInKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1Byb3Bvc2VyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gcHJvcG9zZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI2CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrRmVlc0NvbGxlY3RlZCgwKSwgJ2ZlZXMgY29sbGVjdGVkJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtGZWVzQ29sbGVjdGVkCiAgICBhc3NlcnQgLy8gZmVlcyBjb2xsZWN0ZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI3CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrQm9udXMoMCksICdib251cycpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrQm9udXMKICAgIGFzc2VydCAvLyBib251cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtCcmFuY2goMCksICdicmFuY2gnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa0JyYW5jaAogICAgbGVuCiAgICBhc3NlcnQgLy8gYnJhbmNoCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0ZlZVNpbmsoMCkgIT09IEdsb2JhbC56ZXJvQWRkcmVzcywgJ2ZlZSBzaW5rJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtGZWVTaW5rCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gZmVlIHNpbmsKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrUHJvdG9jb2woMCksICdwcm90b2NvbCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrUHJvdG9jb2wKICAgIGxlbgogICAgYXNzZXJ0IC8vIHByb3RvY29sCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMQogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1R4bkNvdW50ZXIoMCksICd0eG4gY291bnRlcicpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrVHhuQ291bnRlcgogICAgYXNzZXJ0IC8vIHR4biBjb3VudGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMgogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1Byb3Bvc2VyUGF5b3V0KDApLCAncHJvcG9zZXIgcGF5b3V0JykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtQcm9wb3NlclBheW91dAogICAgYXNzZXJ0IC8vIHByb3Bvc2VyIHBheW91dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzUKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c0VuYWJsZWQsICdwYXlvdXRzX2VuYWJsZWQnKQogICAgZ2xvYmFsIFBheW91dHNFbmFibGVkCiAgICBhc3NlcnQgLy8gcGF5b3V0c19lbmFibGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozNgogICAgLy8gYXNzZXJ0KG9wLkdsb2JhbC5wYXlvdXRzR29PbmxpbmVGZWUsICdwYXlvdXRzX2dvX29ubGluZV9mZWUnKQogICAgZ2xvYmFsIFBheW91dHNHb09ubGluZUZlZQogICAgYXNzZXJ0IC8vIHBheW91dHNfZ29fb25saW5lX2ZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzcKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c1BlcmNlbnQsICdwYXlvdXRzX3BlcmNlbnQnKQogICAgZ2xvYmFsIFBheW91dHNQZXJjZW50CiAgICBhc3NlcnQgLy8gcGF5b3V0c19wZXJjZW50CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozOAogICAgLy8gYXNzZXJ0KG9wLkdsb2JhbC5wYXlvdXRzTWluQmFsYW5jZSwgJ3BheW91dHNfbWluX2JhbGFuY2UnKQogICAgZ2xvYmFsIFBheW91dHNNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gcGF5b3V0c19taW5fYmFsYW5jZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzkKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c01heEJhbGFuY2UsICdwYXlvdXRzX21heF9iYWxhbmNlJykKICAgIGdsb2JhbCBQYXlvdXRzTWF4QmFsYW5jZQogICAgYXNzZXJ0IC8vIHBheW91dHNfbWF4X2JhbGFuY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBbZywgaF0gPSBvcC5Wb3RlclBhcmFtcy52b3RlckJhbGFuY2UoMCkKICAgIGludGNfMCAvLyAwCiAgICB2b3Rlcl9wYXJhbXNfZ2V0IFZvdGVyQmFsYW5jZQogICAgcG9wbiAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo0MgogICAgLy8gY29uc3QgW2ksIGpdID0gb3AuVm90ZXJQYXJhbXMudm90ZXJJbmNlbnRpdmVFbGlnaWJsZSgwKQogICAgaW50Y18wIC8vIDAKICAgIHZvdGVyX3BhcmFtc19nZXQgVm90ZXJJbmNlbnRpdmVFbGlnaWJsZQogICAgcG9wbiAyCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/avm11/AVM11Contract.arc56.json b/tests/approvals/out/avm11/AVM11Contract.arc56.json index 64b6b7c2..295af150 100644 --- a/tests/approvals/out/avm11/AVM11Contract.arc56.json +++ b/tests/approvals/out/avm11/AVM11Contract.arc56.json @@ -57,97 +57,97 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 113 + 104 ], "errorMessage": "bonus" }, { "pc": [ - 118 + 109 ], "errorMessage": "branch" }, { "pc": [ - 69 + 60 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 125 + 116 ], "errorMessage": "fee sink" }, { "pc": [ - 109 + 100 ], "errorMessage": "fees collected" }, { "pc": [ - 141 + 132 ], "errorMessage": "payouts_enabled" }, { "pc": [ - 144 + 135 ], "errorMessage": "payouts_go_online_fee" }, { "pc": [ - 153 + 144 ], "errorMessage": "payouts_max_balance" }, { "pc": [ - 150 + 141 ], "errorMessage": "payouts_min_balance" }, { "pc": [ - 147 + 138 ], "errorMessage": "payouts_percent" }, { "pc": [ - 105 + 96 ], "errorMessage": "proposer" }, { "pc": [ - 138 + 129 ], "errorMessage": "proposer payout" }, { "pc": [ - 130 + 121 ], "errorMessage": "protocol" }, { "pc": [ - 134 + 125 ], "errorMessage": "txn counter" } @@ -160,8 +160,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCgp0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MjQ0OGEzMSAvLyBtZXRob2QgInRlc3ROZXdPcHMoKXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0TmV3T3BzX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0TmV3T3BzX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMwogICAgLy8gdGVzdE5ld09wcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdE5ld09wcwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjpBdm0xMUNvbnRyYWN0LnRlc3ROZXdPcHMoKSAtPiB2b2lkOgp0ZXN0TmV3T3BzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTMKICAgIC8vIHRlc3ROZXdPcHMoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjE1CiAgICAvLyBhc3NlcnQoIW9wLmZhbGNvblZlcmlmeShCeXRlcygpLCBCeXRlcygpLCBvcC5iemVybygxNzkzKSkpCiAgICBwdXNoaW50IDE3OTMgLy8gMTc5MwogICAgYnplcm8KICAgIHB1c2hieXRlcyAweAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGZhbGNvbl92ZXJpZnkKICAgICEKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5zdW1oYXNoNTEyKEJ5dGVzKCkpKQogICAgcHVzaGJ5dGVzIDB4CiAgICBzdW1oYXNoNTEyCiAgICBsZW4KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5vbmxpbmVTdGFrZSgpKQogICAgb25saW5lX3N0YWtlCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI1CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrUHJvcG9zZXIoMCkgIT09IEdsb2JhbC56ZXJvQWRkcmVzcywgJ3Byb3Bvc2VyJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtQcm9wb3NlcgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIHByb3Bvc2VyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyNgogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0ZlZXNDb2xsZWN0ZWQoMCksICdmZWVzIGNvbGxlY3RlZCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrRmVlc0NvbGxlY3RlZAogICAgYXNzZXJ0IC8vIGZlZXMgY29sbGVjdGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0JvbnVzKDApLCAnYm9udXMnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa0JvbnVzCiAgICBhc3NlcnQgLy8gYm9udXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrQnJhbmNoKDApLCAnYnJhbmNoJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtCcmFuY2gKICAgIGxlbgogICAgYXNzZXJ0IC8vIGJyYW5jaAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtGZWVTaW5rKDApICE9PSBHbG9iYWwuemVyb0FkZHJlc3MsICdmZWUgc2luaycpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrRmVlU2luawogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0IC8vIGZlZSBzaW5rCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMAogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1Byb3RvY29sKDApLCAncHJvdG9jb2wnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1Byb3RvY29sCiAgICBsZW4KICAgIGFzc2VydCAvLyBwcm90b2NvbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzEKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtUeG5Db3VudGVyKDApLCAndHhuIGNvdW50ZXInKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1R4bkNvdW50ZXIKICAgIGFzc2VydCAvLyB0eG4gY291bnRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzIKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtQcm9wb3NlclBheW91dCgwKSwgJ3Byb3Bvc2VyIHBheW91dCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrUHJvcG9zZXJQYXlvdXQKICAgIGFzc2VydCAvLyBwcm9wb3NlciBwYXlvdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM1CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNFbmFibGVkLCAncGF5b3V0c19lbmFibGVkJykKICAgIGdsb2JhbCBQYXlvdXRzRW5hYmxlZAogICAgYXNzZXJ0IC8vIHBheW91dHNfZW5hYmxlZAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c0dvT25saW5lRmVlLCAncGF5b3V0c19nb19vbmxpbmVfZmVlJykKICAgIGdsb2JhbCBQYXlvdXRzR29PbmxpbmVGZWUKICAgIGFzc2VydCAvLyBwYXlvdXRzX2dvX29ubGluZV9mZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNQZXJjZW50LCAncGF5b3V0c19wZXJjZW50JykKICAgIGdsb2JhbCBQYXlvdXRzUGVyY2VudAogICAgYXNzZXJ0IC8vIHBheW91dHNfcGVyY2VudAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzgKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c01pbkJhbGFuY2UsICdwYXlvdXRzX21pbl9iYWxhbmNlJykKICAgIGdsb2JhbCBQYXlvdXRzTWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIHBheW91dHNfbWluX2JhbGFuY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjM5CiAgICAvLyBhc3NlcnQob3AuR2xvYmFsLnBheW91dHNNYXhCYWxhbmNlLCAncGF5b3V0c19tYXhfYmFsYW5jZScpCiAgICBnbG9iYWwgUGF5b3V0c01heEJhbGFuY2UKICAgIGFzc2VydCAvLyBwYXlvdXRzX21heF9iYWxhbmNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo0MQogICAgLy8gY29uc3QgW2csIGhdID0gb3AuVm90ZXJQYXJhbXMudm90ZXJCYWxhbmNlKDApCiAgICBpbnRjXzAgLy8gMAogICAgdm90ZXJfcGFyYW1zX2dldCBWb3RlckJhbGFuY2UKICAgIHBvcG4gMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6NDIKICAgIC8vIGNvbnN0IFtpLCBqXSA9IG9wLlZvdGVyUGFyYW1zLnZvdGVySW5jZW50aXZlRWxpZ2libGUoMCkKICAgIGludGNfMCAvLyAwCiAgICB2b3Rlcl9wYXJhbXNfZ2V0IFZvdGVySW5jZW50aXZlRWxpZ2libGUKICAgIHBvcG4gMgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTEtMTIKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdBVk0xMUNvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBBdm0xMUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCgp0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MjQ0OGEzMSAvLyBtZXRob2QgInRlc3ROZXdPcHMoKXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3ROZXdPcHNfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjExLTEyCiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQVZNMTFDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQXZtMTFDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTE6CiAgICByZXR1cm4KCm1haW5fdGVzdE5ld09wc19yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTMKICAgIC8vIHRlc3ROZXdPcHMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3ROZXdPcHMKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMQoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjExLTEyCiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQVZNMTFDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQXZtMTFDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjpBdm0xMUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgoKLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6OkF2bTExQ29udHJhY3QudGVzdE5ld09wcygpIC0+IHZvaWQ6CnRlc3ROZXdPcHM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMwogICAgLy8gdGVzdE5ld09wcygpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MTUKICAgIC8vIGFzc2VydCghb3AuZmFsY29uVmVyaWZ5KEJ5dGVzKCksIEJ5dGVzKCksIG9wLmJ6ZXJvKDE3OTMpKSkKICAgIHB1c2hpbnQgMTc5MyAvLyAxNzkzCiAgICBiemVybwogICAgcHVzaGJ5dGVzIDB4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZmFsY29uX3ZlcmlmeQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLnN1bWhhc2g1MTIoQnl0ZXMoKSkpCiAgICBwdXNoYnl0ZXMgMHgKICAgIHN1bWhhc2g1MTIKICAgIGxlbgogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLm9ubGluZVN0YWtlKCkpCiAgICBvbmxpbmVfc3Rha2UKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjUKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtQcm9wb3NlcigwKSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzLCAncHJvcG9zZXInKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa1Byb3Bvc2VyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gcHJvcG9zZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI2CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrRmVlc0NvbGxlY3RlZCgwKSwgJ2ZlZXMgY29sbGVjdGVkJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtGZWVzQ29sbGVjdGVkCiAgICBhc3NlcnQgLy8gZmVlcyBjb2xsZWN0ZWQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjI3CiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrQm9udXMoMCksICdib251cycpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrQm9udXMKICAgIGFzc2VydCAvLyBib251cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChvcC5CbG9jay5ibGtCcmFuY2goMCksICdicmFuY2gnKQogICAgaW50Y18wIC8vIDAKICAgIGJsb2NrIEJsa0JyYW5jaAogICAgbGVuCiAgICBhc3NlcnQgLy8gYnJhbmNoCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoyOQogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa0ZlZVNpbmsoMCkgIT09IEdsb2JhbC56ZXJvQWRkcmVzcywgJ2ZlZSBzaW5rJykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtGZWVTaW5rCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBhc3NlcnQgLy8gZmVlIHNpbmsKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQob3AuQmxvY2suYmxrUHJvdG9jb2woMCksICdwcm90b2NvbCcpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrUHJvdG9jb2wKICAgIGxlbgogICAgYXNzZXJ0IC8vIHByb3RvY29sCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMQogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1R4bkNvdW50ZXIoMCksICd0eG4gY291bnRlcicpCiAgICBpbnRjXzAgLy8gMAogICAgYmxvY2sgQmxrVHhuQ291bnRlcgogICAgYXNzZXJ0IC8vIHR4biBjb3VudGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozMgogICAgLy8gYXNzZXJ0KG9wLkJsb2NrLmJsa1Byb3Bvc2VyUGF5b3V0KDApLCAncHJvcG9zZXIgcGF5b3V0JykKICAgIGludGNfMCAvLyAwCiAgICBibG9jayBCbGtQcm9wb3NlclBheW91dAogICAgYXNzZXJ0IC8vIHByb3Bvc2VyIHBheW91dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzUKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c0VuYWJsZWQsICdwYXlvdXRzX2VuYWJsZWQnKQogICAgZ2xvYmFsIFBheW91dHNFbmFibGVkCiAgICBhc3NlcnQgLy8gcGF5b3V0c19lbmFibGVkCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozNgogICAgLy8gYXNzZXJ0KG9wLkdsb2JhbC5wYXlvdXRzR29PbmxpbmVGZWUsICdwYXlvdXRzX2dvX29ubGluZV9mZWUnKQogICAgZ2xvYmFsIFBheW91dHNHb09ubGluZUZlZQogICAgYXNzZXJ0IC8vIHBheW91dHNfZ29fb25saW5lX2ZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzcKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c1BlcmNlbnQsICdwYXlvdXRzX3BlcmNlbnQnKQogICAgZ2xvYmFsIFBheW91dHNQZXJjZW50CiAgICBhc3NlcnQgLy8gcGF5b3V0c19wZXJjZW50CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czozOAogICAgLy8gYXNzZXJ0KG9wLkdsb2JhbC5wYXlvdXRzTWluQmFsYW5jZSwgJ3BheW91dHNfbWluX2JhbGFuY2UnKQogICAgZ2xvYmFsIFBheW91dHNNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gcGF5b3V0c19taW5fYmFsYW5jZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2F2bTExLmFsZ28udHM6MzkKICAgIC8vIGFzc2VydChvcC5HbG9iYWwucGF5b3V0c01heEJhbGFuY2UsICdwYXlvdXRzX21heF9iYWxhbmNlJykKICAgIGdsb2JhbCBQYXlvdXRzTWF4QmFsYW5jZQogICAgYXNzZXJ0IC8vIHBheW91dHNfbWF4X2JhbGFuY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hdm0xMS5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBbZywgaF0gPSBvcC5Wb3RlclBhcmFtcy52b3RlckJhbGFuY2UoMCkKICAgIGludGNfMCAvLyAwCiAgICB2b3Rlcl9wYXJhbXNfZ2V0IFZvdGVyQmFsYW5jZQogICAgcG9wbiAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo0MgogICAgLy8gY29uc3QgW2ksIGpdID0gb3AuVm90ZXJQYXJhbXMudm90ZXJJbmNlbnRpdmVFbGlnaWJsZSgwKQogICAgaW50Y18wIC8vIDAKICAgIHZvdGVyX3BhcmFtc19nZXQgVm90ZXJJbmNlbnRpdmVFbGlnaWJsZQogICAgcG9wbiAyCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czo6QXZtMTFDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXZtMTEuYWxnby50czoxMS0xMgogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0FWTTExQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEF2bTExQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyACAAExGyITQQAhNhoAgARSRIoxTI4BAAIiQzEZIhJEMRgiE0SIABsjQv/uMRkiTI4BAANC/+IxGCISRIgAXCNC/9eKAACBgQ6vgABJTwKFFESAAIYVRHVEItECMgMTRCLRA0Qi0QREItEFFUQi0QYyAxNEItEHFUQi0QhEItEJRDISRDITRDIURDIVRDIWRCJ0AEYCInQBRgKJigAAiQ==", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/avm11/AVM11Contract.clear.teal b/tests/approvals/out/avm11/AVM11Contract.clear.teal index 82954f6e..42f81b0f 100644 --- a/tests/approvals/out/avm11/AVM11Contract.clear.teal +++ b/tests/approvals/out/avm11/AVM11Contract.clear.teal @@ -1,5 +1,7 @@ #pragma version 11 +#pragma typetrack false -tests/approvals/avm11.algo.ts::Avm11Contract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.approval.0.ssa.ir b/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.approval.0.ssa.ir new file mode 100644 index 00000000..6ad2239e --- /dev/null +++ b/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.approval.0.ssa.ir @@ -0,0 +1,108 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__() -> bool: + block@0: // L11 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L11 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "testNewOps()void" => block@2, * => block@3} + block@2: // testNewOps_route_L13 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/avm11.algo.ts::Avm11Contract.testNewOps() + return 1u + block@3: // switch_case_default_L11 + goto block@4 + block@4: // switch_case_next_L11 + goto block@9 + block@5: // bare_routing_L11 + let tmp%7#0: uint64 = (txn OnCompletion) + switch tmp%7#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L11 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (== tmp%8#0 0u) + (assert tmp%9#0) // can only call when creating + tests/approvals/avm11.algo.ts::Avm11Contract.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L11 + goto block@8 + block@8: // switch_case_next_L11 + goto block@9 + block@9: // after_if_else_L11 + return 0u + +subroutine tests/approvals/avm11.algo.ts::Avm11Contract.testNewOps() -> void: + block@0: // L13 + let tmp%0#0: bytes = (bzero 1793u) + let tmp%1#0: bool = (falcon_verify 0x 0x tmp%0#0) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let tmp%3#0: bytes = (sumhash512 0x) + let reinterpret_bool%0#0: bool = (len tmp%3#0) + (assert reinterpret_bool%0#0) + let reinterpret_bool%1#0: bool = online_stake + (assert reinterpret_bool%1#0) + let tmp%4#0: bytes = (txn Sender) + let (tuple_assignment%0#0: bool, tuple_assignment%1#0: bool) = ((acct_params_get AcctIncentiveEligible) tmp%4#0) + let a#0: bool = tuple_assignment%0#0 + let b#0: bool = tuple_assignment%1#0 + let tmp%5#0: bytes = (txn Sender) + let (tuple_assignment%2#0: uint64, tuple_assignment%3#0: bool) = ((acct_params_get AcctLastProposed) tmp%5#0) + let c#0: uint64 = tuple_assignment%2#0 + let d#0: bool = tuple_assignment%3#0 + let tmp%6#0: bytes = (txn Sender) + let (tuple_assignment%4#0: uint64, tuple_assignment%5#0: bool) = ((acct_params_get AcctLastProposed) tmp%6#0) + let e#0: uint64 = tuple_assignment%4#0 + let f#0: bool = tuple_assignment%5#0 + let tmp%7#0: bytes = ((block BlkProposer) 0u) + let tmp%8#0: bytes = (global ZeroAddress) + let tmp%9#0: bool = (!= tmp%7#0 tmp%8#0) + (assert tmp%9#0) // proposer + let reinterpret_bool%2#0: bool = ((block BlkFeesCollected) 0u) + (assert reinterpret_bool%2#0) // fees collected + let reinterpret_bool%3#0: bool = ((block BlkBonus) 0u) + (assert reinterpret_bool%3#0) // bonus + let tmp%10#0: bytes = ((block BlkBranch) 0u) + let reinterpret_bool%4#0: bool = (len tmp%10#0) + (assert reinterpret_bool%4#0) // branch + let tmp%11#0: bytes = ((block BlkFeeSink) 0u) + let tmp%12#0: bytes = (global ZeroAddress) + let tmp%13#0: bool = (!= tmp%11#0 tmp%12#0) + (assert tmp%13#0) // fee sink + let tmp%14#0: bytes = ((block BlkProtocol) 0u) + let reinterpret_bool%5#0: bool = (len tmp%14#0) + (assert reinterpret_bool%5#0) // protocol + let reinterpret_bool%6#0: bool = ((block BlkTxnCounter) 0u) + (assert reinterpret_bool%6#0) // txn counter + let reinterpret_bool%7#0: bool = ((block BlkProposerPayout) 0u) + (assert reinterpret_bool%7#0) // proposer payout + let tmp%15#0: bool = (global PayoutsEnabled) + (assert tmp%15#0) // payouts_enabled + let reinterpret_bool%8#0: bool = (global PayoutsGoOnlineFee) + (assert reinterpret_bool%8#0) // payouts_go_online_fee + let reinterpret_bool%9#0: bool = (global PayoutsPercent) + (assert reinterpret_bool%9#0) // payouts_percent + let reinterpret_bool%10#0: bool = (global PayoutsMinBalance) + (assert reinterpret_bool%10#0) // payouts_min_balance + let reinterpret_bool%11#0: bool = (global PayoutsMaxBalance) + (assert reinterpret_bool%11#0) // payouts_max_balance + let (tuple_assignment%6#0: uint64, tuple_assignment%7#0: bool) = ((voter_params_get VoterBalance) 0u) + let g#0: uint64 = tuple_assignment%6#0 + let h#0: bool = tuple_assignment%7#0 + let (tuple_assignment%8#0: bool, tuple_assignment%9#0: bool) = ((voter_params_get VoterIncentiveEligible) 0u) + let i#0: bool = tuple_assignment%8#0 + let j#0: bool = tuple_assignment%9#0 + return + +subroutine tests/approvals/avm11.algo.ts::Avm11Contract.__algots__.defaultCreate() -> void: + block@0: // L11 + return \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.clear.0.ssa.ir b/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/avm11/AVM11Contract.ir/AVM11Contract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11Contract.ssa.ir b/tests/approvals/out/avm11/AVM11Contract.ssa.ir deleted file mode 100644 index e1b1292a..00000000 --- a/tests/approvals/out/avm11/AVM11Contract.ssa.ir +++ /dev/null @@ -1,115 +0,0 @@ -contract tests/approvals/avm11.algo.ts::Avm11Contract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/avm11.algo.ts::Avm11Contract.__puya_arc4_router__() -> bool: - block@0: // L11 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L11 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "testNewOps()void" => block@2, * => block@3} - block@2: // testNewOps_route_L13 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/avm11.algo.ts::Avm11Contract.testNewOps() - return 1u - block@3: // switch_case_default_L11 - goto block@4 - block@4: // switch_case_next_L11 - goto block@9 - block@5: // bare_routing_L11 - let tmp%7#0: uint64 = (txn OnCompletion) - switch tmp%7#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L11 - let tmp%8#0: uint64 = (txn ApplicationID) - let tmp%9#0: bool = (== tmp%8#0 0u) - (assert tmp%9#0) // can only call when creating - tests/approvals/avm11.algo.ts::Avm11Contract.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L11 - goto block@8 - block@8: // switch_case_next_L11 - goto block@9 - block@9: // after_if_else_L11 - return 0u - - subroutine tests/approvals/avm11.algo.ts::Avm11Contract.testNewOps() -> void: - block@0: // L13 - let tmp%0#0: bytes = (bzero 1793u) - let tmp%1#0: bool = (falcon_verify 0x 0x tmp%0#0) - let tmp%2#0: bool = (! tmp%1#0) - (assert tmp%2#0) - let tmp%3#0: bytes = (sumhash512 0x) - let reinterpret_bool%0#0: bool = (len tmp%3#0) - (assert reinterpret_bool%0#0) - let reinterpret_bool%1#0: bool = online_stake - (assert reinterpret_bool%1#0) - let tmp%4#0: bytes = (txn Sender) - let (tuple_assignment%0#0: bool, tuple_assignment%1#0: bool) = ((acct_params_get AcctIncentiveEligible) tmp%4#0) - let a#0: bool = tuple_assignment%0#0 - let b#0: bool = tuple_assignment%1#0 - let tmp%5#0: bytes = (txn Sender) - let (tuple_assignment%2#0: uint64, tuple_assignment%3#0: bool) = ((acct_params_get AcctLastProposed) tmp%5#0) - let c#0: uint64 = tuple_assignment%2#0 - let d#0: bool = tuple_assignment%3#0 - let tmp%6#0: bytes = (txn Sender) - let (tuple_assignment%4#0: uint64, tuple_assignment%5#0: bool) = ((acct_params_get AcctLastProposed) tmp%6#0) - let e#0: uint64 = tuple_assignment%4#0 - let f#0: bool = tuple_assignment%5#0 - let tmp%7#0: bytes = ((block BlkProposer) 0u) - let tmp%8#0: bytes = (global ZeroAddress) - let tmp%9#0: bool = (!= tmp%7#0 tmp%8#0) - (assert tmp%9#0) // proposer - let reinterpret_bool%2#0: bool = ((block BlkFeesCollected) 0u) - (assert reinterpret_bool%2#0) // fees collected - let reinterpret_bool%3#0: bool = ((block BlkBonus) 0u) - (assert reinterpret_bool%3#0) // bonus - let tmp%10#0: bytes = ((block BlkBranch) 0u) - let reinterpret_bool%4#0: bool = (len tmp%10#0) - (assert reinterpret_bool%4#0) // branch - let tmp%11#0: bytes = ((block BlkFeeSink) 0u) - let tmp%12#0: bytes = (global ZeroAddress) - let tmp%13#0: bool = (!= tmp%11#0 tmp%12#0) - (assert tmp%13#0) // fee sink - let tmp%14#0: bytes = ((block BlkProtocol) 0u) - let reinterpret_bool%5#0: bool = (len tmp%14#0) - (assert reinterpret_bool%5#0) // protocol - let reinterpret_bool%6#0: bool = ((block BlkTxnCounter) 0u) - (assert reinterpret_bool%6#0) // txn counter - let reinterpret_bool%7#0: bool = ((block BlkProposerPayout) 0u) - (assert reinterpret_bool%7#0) // proposer payout - let tmp%15#0: bool = (global PayoutsEnabled) - (assert tmp%15#0) // payouts_enabled - let reinterpret_bool%8#0: bool = (global PayoutsGoOnlineFee) - (assert reinterpret_bool%8#0) // payouts_go_online_fee - let reinterpret_bool%9#0: bool = (global PayoutsPercent) - (assert reinterpret_bool%9#0) // payouts_percent - let reinterpret_bool%10#0: bool = (global PayoutsMinBalance) - (assert reinterpret_bool%10#0) // payouts_min_balance - let reinterpret_bool%11#0: bool = (global PayoutsMaxBalance) - (assert reinterpret_bool%11#0) // payouts_max_balance - let (tuple_assignment%6#0: uint64, tuple_assignment%7#0: bool) = ((voter_params_get VoterBalance) 0u) - let g#0: uint64 = tuple_assignment%6#0 - let h#0: bool = tuple_assignment%7#0 - let (tuple_assignment%8#0: bool, tuple_assignment%9#0: bool) = ((voter_params_get VoterIncentiveEligible) 0u) - let i#0: bool = tuple_assignment%8#0 - let j#0: bool = tuple_assignment%9#0 - return - - subroutine tests/approvals/avm11.algo.ts::Avm11Contract.__algots__.defaultCreate() -> void: - block@0: // L11 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11SIG.ir/AVM11SIG.0.ssa.ir b/tests/approvals/out/avm11/AVM11SIG.ir/AVM11SIG.0.ssa.ir new file mode 100644 index 00000000..ef85aae5 --- /dev/null +++ b/tests/approvals/out/avm11/AVM11SIG.ir/AVM11SIG.0.ssa.ir @@ -0,0 +1,5 @@ +main tests/approvals/avm11.algo.ts::program: + block@0: // L6 + let tmp%0#0: bytes = (sumhash512 "") + let tmp%1#0: uint64 = (len tmp%0#0) + return tmp%1#0 \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11SIG.ssa.ir b/tests/approvals/out/avm11/AVM11SIG.ssa.ir deleted file mode 100644 index bab52bb6..00000000 --- a/tests/approvals/out/avm11/AVM11SIG.ssa.ir +++ /dev/null @@ -1,6 +0,0 @@ -program logicsig tests/approvals/avm11.algo.ts::Avm11Sig: - subroutine tests/approvals/avm11.algo.ts::program() -> uint64: - block@0: // L6 - let tmp%0#0: bytes = (sumhash512 "") - let tmp%1#0: uint64 = (len tmp%0#0) - return tmp%1#0 \ No newline at end of file diff --git a/tests/approvals/out/avm11/AVM11SIG.teal b/tests/approvals/out/avm11/AVM11SIG.teal index 5205cee9..2735e7a7 100644 --- a/tests/approvals/out/avm11/AVM11SIG.teal +++ b/tests/approvals/out/avm11/AVM11SIG.teal @@ -1,6 +1,8 @@ #pragma version 11 +#pragma typetrack false -tests/approvals/avm11.algo.ts::Avm11Sig: +// tests/approvals/avm11.algo.ts::program() -> uint64: +main: // tests/approvals/avm11.algo.ts:7 // return op.sumhash512(Bytes('')).length pushbytes "" diff --git a/tests/approvals/out/biguint-expressions/DemoContract.approval.teal b/tests/approvals/out/biguint-expressions/DemoContract.approval.teal index 3a906b83..90764474 100644 --- a/tests/approvals/out/biguint-expressions/DemoContract.approval.teal +++ b/tests/approvals/out/biguint-expressions/DemoContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/biguint-expressions.algo.ts::DemoContract.approvalProgram: +// tests/approvals/biguint-expressions.algo.ts::DemoContract.approvalProgram() -> uint64: +main: intcblock 4 0 1 bytecblock 0x 0x01 // tests/approvals/biguint-expressions.algo.ts:32 diff --git a/tests/approvals/out/biguint-expressions/DemoContract.clear.teal b/tests/approvals/out/biguint-expressions/DemoContract.clear.teal index 02d4c3c7..a4d58047 100644 --- a/tests/approvals/out/biguint-expressions/DemoContract.clear.teal +++ b/tests/approvals/out/biguint-expressions/DemoContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/biguint-expressions.algo.ts::DemoContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir b/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir new file mode 100644 index 00000000..3c8836a5 --- /dev/null +++ b/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir @@ -0,0 +1,63 @@ +main tests/approvals/biguint-expressions.algo.ts::DemoContract.approvalProgram: + block@0: // L31 + let tmp%0#0: bytes = (itob 4u) + tests/approvals/biguint-expressions.algo.ts::testConstructor(12312312u, 12312312b, 0u, 0b, tmp%0#0, 4b) + tests/approvals/biguint-expressions.algo.ts::testOps(500b, 1000b) + return 1u + +subroutine tests/approvals/biguint-expressions.algo.ts::testConstructor(a: uint64, a_b: biguint, b: bool, b_b: biguint, c: bytes, c_b: biguint) -> void: + block@0: // L5 + let tmp%0#0: bool = (b== 0b 0b) + (assert tmp%0#0) + let reinterpret_biguint%0#0: biguint = (itob 1u) + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 1b) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = (itob 0u) + let tmp%2#0: bool = (b== reinterpret_biguint%1#0 0b) + (assert tmp%2#0) + let tmp%3#0: bool = (b== 0b 0b) + (assert tmp%3#0) + let tmp%4#0: bool = (b== 1b 1b) + (assert tmp%4#0) + let tmp%5#0: bool = (b== 0b 0b) + (assert tmp%5#0) + let tmp%6#0: bool = (b== 1b 1b) + (assert tmp%6#0) + let tmp%7#0: bool = (b== 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095b 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095b) + (assert tmp%7#0) + let tmp%8#0: bool = (b== 1231232134123123b 1231232134123123b) + (assert tmp%8#0) + let reinterpret_biguint%2#0: biguint = (itob a#0) + let tmp%9#0: bool = (b== reinterpret_biguint%2#0 a_b#0) + (assert tmp%9#0) + let tmp%10#0: uint64 = (* a#0 a#0) + let reinterpret_biguint%3#0: biguint = (itob tmp%10#0) + let tmp%11#0: biguint = (b* a_b#0 a_b#0) + let tmp%12#0: bool = (b== reinterpret_biguint%3#0 tmp%11#0) + (assert tmp%12#0) + let reinterpret_biguint%4#0: biguint = (itob b#0) + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 b_b#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = c#0 + let tmp%14#0: bool = (b== reinterpret_biguint%5#0 c_b#0) + (assert tmp%14#0) + return + +subroutine tests/approvals/biguint-expressions.algo.ts::testOps(smaller: biguint, larger: biguint) -> void: + block@0: // L21 + let tmp%0#0: bool = (b< smaller#0 larger#0) + (assert tmp%0#0) + let tmp%1#0: bool = (b<= smaller#0 smaller#0) + (assert tmp%1#0) + let tmp%2#0: bool = (b> larger#0 smaller#0) + (assert tmp%2#0) + let tmp%3#0: bool = (b>= larger#0 larger#0) + (assert tmp%3#0) + let tmp%4#0: bool = (b== smaller#0 smaller#0) + (assert tmp%4#0) + let tmp%5#0: bytes = (bzero 4u) + let reinterpret_bytes%0#0: bytes = smaller#0 + let reinterpret_biguint%0#0: biguint = (concat tmp%5#0 reinterpret_bytes%0#0) + let tmp%6#0: bool = (b== smaller#0 reinterpret_biguint%0#0) + (assert tmp%6#0) // Leading zeros should be ignored in equality + return \ No newline at end of file diff --git a/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir b/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/biguint-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/biguint-expressions/DemoContract.ssa.ir b/tests/approvals/out/biguint-expressions/DemoContract.ssa.ir deleted file mode 100644 index ec55e9a1..00000000 --- a/tests/approvals/out/biguint-expressions/DemoContract.ssa.ir +++ /dev/null @@ -1,70 +0,0 @@ -contract tests/approvals/biguint-expressions.algo.ts::DemoContract: - program approval: - subroutine tests/approvals/biguint-expressions.algo.ts::DemoContract.approvalProgram() -> bool: - block@0: // L31 - let tmp%0#0: bytes = (itob 4u) - tests/approvals/biguint-expressions.algo.ts::testConstructor(12312312u, 12312312b, 0u, 0b, tmp%0#0, 4b) - tests/approvals/biguint-expressions.algo.ts::testOps(500b, 1000b) - return 1u - - subroutine tests/approvals/biguint-expressions.algo.ts::testConstructor(a: uint64, a_b: biguint, b: bool, b_b: biguint, c: bytes, c_b: biguint) -> void: - block@0: // L5 - let tmp%0#0: bool = (b== 0b 0b) - (assert tmp%0#0) - let reinterpret_biguint%0#0: biguint = (itob 1u) - let tmp%1#0: bool = (b== reinterpret_biguint%0#0 1b) - (assert tmp%1#0) - let reinterpret_biguint%1#0: biguint = (itob 0u) - let tmp%2#0: bool = (b== reinterpret_biguint%1#0 0b) - (assert tmp%2#0) - let tmp%3#0: bool = (b== 0b 0b) - (assert tmp%3#0) - let tmp%4#0: bool = (b== 1b 1b) - (assert tmp%4#0) - let tmp%5#0: bool = (b== 0b 0b) - (assert tmp%5#0) - let tmp%6#0: bool = (b== 1b 1b) - (assert tmp%6#0) - let tmp%7#0: bool = (b== 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095b 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095b) - (assert tmp%7#0) - let tmp%8#0: bool = (b== 1231232134123123b 1231232134123123b) - (assert tmp%8#0) - let reinterpret_biguint%2#0: biguint = (itob a#0) - let tmp%9#0: bool = (b== reinterpret_biguint%2#0 a_b#0) - (assert tmp%9#0) - let tmp%10#0: uint64 = (* a#0 a#0) - let reinterpret_biguint%3#0: biguint = (itob tmp%10#0) - let tmp%11#0: biguint = (b* a_b#0 a_b#0) - let tmp%12#0: bool = (b== reinterpret_biguint%3#0 tmp%11#0) - (assert tmp%12#0) - let reinterpret_biguint%4#0: biguint = (itob b#0) - let tmp%13#0: bool = (b== reinterpret_biguint%4#0 b_b#0) - (assert tmp%13#0) - let reinterpret_biguint%5#0: biguint = c#0 - let tmp%14#0: bool = (b== reinterpret_biguint%5#0 c_b#0) - (assert tmp%14#0) - return - - subroutine tests/approvals/biguint-expressions.algo.ts::testOps(smaller: biguint, larger: biguint) -> void: - block@0: // L21 - let tmp%0#0: bool = (b< smaller#0 larger#0) - (assert tmp%0#0) - let tmp%1#0: bool = (b<= smaller#0 smaller#0) - (assert tmp%1#0) - let tmp%2#0: bool = (b> larger#0 smaller#0) - (assert tmp%2#0) - let tmp%3#0: bool = (b>= larger#0 larger#0) - (assert tmp%3#0) - let tmp%4#0: bool = (b== smaller#0 smaller#0) - (assert tmp%4#0) - let tmp%5#0: bytes = (bzero 4u) - let reinterpret_bytes%0#0: bytes = smaller#0 - let reinterpret_biguint%0#0: biguint = (concat tmp%5#0 reinterpret_bytes%0#0) - let tmp%6#0: bool = (b== smaller#0 reinterpret_biguint%0#0) - (assert tmp%6#0) // Leading zeros should be ignored in equality - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.approval.teal b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.approval.teal index cf23a548..cb904727 100644 --- a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.approval.teal +++ b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo.approvalProgram: +// tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo.approvalProgram() -> uint64: +main: intcblock 1 0 bytecblock 0x "abc" 0x01 "abcdef" // tests/approvals/boolean-conversions.algo.ts:34 diff --git a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.clear.teal b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.clear.teal index 437f4608..a4d58047 100644 --- a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.clear.teal +++ b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.approval.0.ssa.ir b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.approval.0.ssa.ir new file mode 100644 index 00000000..98be581b --- /dev/null +++ b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.approval.0.ssa.ir @@ -0,0 +1,69 @@ +main tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo.approvalProgram: + block@0: // L33 + tests/approvals/boolean-conversions.algo.ts::test_truthyness() + tests/approvals/boolean-conversions.algo.ts::test_booleans_are_equal() + return 1u + +subroutine tests/approvals/boolean-conversions.algo.ts::test_truthyness() -> void: + block@0: // L3 + let reinterpret_bool%0#0: bool = 0u + let tmp%0#0: bool = (! reinterpret_bool%0#0) + (assert tmp%0#0) // Zero is falsy + let reinterpret_bool%1#0: bool = 1u + (assert reinterpret_bool%1#0) // Non zero is truthy + let reinterpret_bool%2#0: bool = (bitlen 0b) + let tmp%1#0: bool = (! reinterpret_bool%2#0) + (assert tmp%1#0) // Zero is falsy + let reinterpret_bool%3#0: bool = (bitlen 1b) + (assert reinterpret_bool%3#0) // Non zero is truthy + let reinterpret_bool%4#0: bool = (len 0x) + let tmp%2#0: bool = (! reinterpret_bool%4#0) + (assert tmp%2#0) // Empty is falsy + let reinterpret_bool%5#0: bool = (len "abc") + (assert reinterpret_bool%5#0) // Non empty is truthy + let empty#0: bytes = "" + let reinterpret_bool%6#0: bool = (len empty#0) + let tmp%3#0: bool = (! reinterpret_bool%6#0) + (assert tmp%3#0) // Empty is falsy + let reinterpret_bool%7#0: bool = (len "abc") + (assert reinterpret_bool%7#0) // Non empty is truthy + let tmp%4#0: bool = (! 0u) + (assert tmp%4#0) // False is falsy + return + +subroutine tests/approvals/boolean-conversions.algo.ts::test_booleans_are_equal() -> void: + block@0: // L19 + let tmp%0#0: bool = (! 1u) + let tmp%1#0: bool = (! tmp%0#0) + let tmp%2#0: bool = (! 1u) + let tmp%3#0: bool = (! tmp%2#0) + let tmp%4#0: bool = (== tmp%1#0 tmp%3#0) + (assert tmp%4#0) + let reinterpret_bool%0#0: bool = 1u + let tmp%5#0: bool = (! reinterpret_bool%0#0) + let tmp%6#0: bool = (! tmp%5#0) + let reinterpret_bool%1#0: bool = 5u + let tmp%7#0: bool = (! reinterpret_bool%1#0) + let tmp%8#0: bool = (! tmp%7#0) + let tmp%9#0: bool = (== tmp%6#0 tmp%8#0) + (assert tmp%9#0) + let reinterpret_bool%2#0: bool = (bitlen 1b) + let tmp%10#0: bool = (! reinterpret_bool%2#0) + let tmp%11#0: bool = (! tmp%10#0) + let reinterpret_bool%3#0: bool = (bitlen 5b) + let tmp%12#0: bool = (! reinterpret_bool%3#0) + let tmp%13#0: bool = (! tmp%12#0) + let tmp%14#0: bool = (== tmp%11#0 tmp%13#0) + (assert tmp%14#0) + let tmp%15#0: bool = (!= "abc" 0x) + let tmp%16#0: bool = (!= "abcdef" 0x) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bool = (!= "abc" 0x) + let tmp%19#0: bool = (!= "abcdef" 0x) + let tmp%20#0: bool = (== tmp%18#0 tmp%19#0) + (assert tmp%20#0) + let boolNoArgs#0: bool = 0u + let tmp%21#0: bool = (! boolNoArgs#0) + (assert tmp%21#0) + return \ No newline at end of file diff --git a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.clear.0.ssa.ir b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ir/BooleanConversionsAlgo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ssa.ir b/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ssa.ir deleted file mode 100644 index e96cbb4c..00000000 --- a/tests/approvals/out/boolean-conversions/BooleanConversionsAlgo.ssa.ir +++ /dev/null @@ -1,76 +0,0 @@ -contract tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo: - program approval: - subroutine tests/approvals/boolean-conversions.algo.ts::BooleanConversionsAlgo.approvalProgram() -> bool: - block@0: // L33 - tests/approvals/boolean-conversions.algo.ts::test_truthyness() - tests/approvals/boolean-conversions.algo.ts::test_booleans_are_equal() - return 1u - - subroutine tests/approvals/boolean-conversions.algo.ts::test_truthyness() -> void: - block@0: // L3 - let reinterpret_bool%0#0: bool = 0u - let tmp%0#0: bool = (! reinterpret_bool%0#0) - (assert tmp%0#0) // Zero is falsy - let reinterpret_bool%1#0: bool = 1u - (assert reinterpret_bool%1#0) // Non zero is truthy - let reinterpret_bool%2#0: bool = (bitlen 0b) - let tmp%1#0: bool = (! reinterpret_bool%2#0) - (assert tmp%1#0) // Zero is falsy - let reinterpret_bool%3#0: bool = (bitlen 1b) - (assert reinterpret_bool%3#0) // Non zero is truthy - let reinterpret_bool%4#0: bool = (len 0x) - let tmp%2#0: bool = (! reinterpret_bool%4#0) - (assert tmp%2#0) // Empty is falsy - let reinterpret_bool%5#0: bool = (len "abc") - (assert reinterpret_bool%5#0) // Non empty is truthy - let empty#0: bytes = "" - let reinterpret_bool%6#0: bool = (len empty#0) - let tmp%3#0: bool = (! reinterpret_bool%6#0) - (assert tmp%3#0) // Empty is falsy - let reinterpret_bool%7#0: bool = (len "abc") - (assert reinterpret_bool%7#0) // Non empty is truthy - let tmp%4#0: bool = (! 0u) - (assert tmp%4#0) // False is falsy - return - - subroutine tests/approvals/boolean-conversions.algo.ts::test_booleans_are_equal() -> void: - block@0: // L19 - let tmp%0#0: bool = (! 1u) - let tmp%1#0: bool = (! tmp%0#0) - let tmp%2#0: bool = (! 1u) - let tmp%3#0: bool = (! tmp%2#0) - let tmp%4#0: bool = (== tmp%1#0 tmp%3#0) - (assert tmp%4#0) - let reinterpret_bool%0#0: bool = 1u - let tmp%5#0: bool = (! reinterpret_bool%0#0) - let tmp%6#0: bool = (! tmp%5#0) - let reinterpret_bool%1#0: bool = 5u - let tmp%7#0: bool = (! reinterpret_bool%1#0) - let tmp%8#0: bool = (! tmp%7#0) - let tmp%9#0: bool = (== tmp%6#0 tmp%8#0) - (assert tmp%9#0) - let reinterpret_bool%2#0: bool = (bitlen 1b) - let tmp%10#0: bool = (! reinterpret_bool%2#0) - let tmp%11#0: bool = (! tmp%10#0) - let reinterpret_bool%3#0: bool = (bitlen 5b) - let tmp%12#0: bool = (! reinterpret_bool%3#0) - let tmp%13#0: bool = (! tmp%12#0) - let tmp%14#0: bool = (== tmp%11#0 tmp%13#0) - (assert tmp%14#0) - let tmp%15#0: bool = (!= "abc" 0x) - let tmp%16#0: bool = (!= "abcdef" 0x) - let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) - (assert tmp%17#0) - let tmp%18#0: bool = (!= "abc" 0x) - let tmp%19#0: bool = (!= "abcdef" 0x) - let tmp%20#0: bool = (== tmp%18#0 tmp%19#0) - (assert tmp%20#0) - let boolNoArgs#0: bool = 0u - let tmp%21#0: bool = (! boolNoArgs#0) - (assert tmp%21#0) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/box-enum-contract/BoxContract.approval.teal b/tests/approvals/out/box-enum-contract/BoxContract.approval.teal index 81e35e89..8c450885 100644 --- a/tests/approvals/out/box-enum-contract/BoxContract.approval.teal +++ b/tests/approvals/out/box-enum-contract/BoxContract.approval.teal @@ -1,44 +1,41 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/box-enum-contract.algo.ts::BoxContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "oca" "txn" - callsub __puya_arc4_router__ - return - -// tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/box-enum-contract.algo.ts:4 // export class BoxContract extends arc4.Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/box-enum-contract.algo.ts:4 + // export class BoxContract extends arc4.Contract { txna ApplicationArgs 0 pushbytes 0xf26c6d42 // method "store_enums()void" pushbytes 0xef186cf7 // method "read_enums()(uint64,uint64)" uncover 2 - match __puya_arc4_router___store_enums_route@2 __puya_arc4_router___read_enums_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_store_enums_route@3 main_read_enums_route@4 -__puya_arc4_router___store_enums_route@2: - // tests/approvals/box-enum-contract.algo.ts:8 - // @arc4.abimethod({ name: 'store_enums' }) - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/box-enum-contract.algo.ts:4 + // export class BoxContract extends arc4.Contract { intc_0 // 0 - != - assert // can only call when not creating - callsub storeEnums - intc_1 // 1 - retsub -__puya_arc4_router___read_enums_route@3: +main_after_inlined_tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__@12: + return + +main_read_enums_route@4: // tests/approvals/box-enum-contract.algo.ts:14 // @arc4.abimethod({ name: 'read_enums' }) txn OnCompletion @@ -55,21 +52,37 @@ __puya_arc4_router___read_enums_route@3: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__@12 -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 +main_store_enums_route@3: + // tests/approvals/box-enum-contract.algo.ts:8 + // @arc4.abimethod({ name: 'store_enums' }) + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub storeEnums + intc_1 // 1 + b main_after_inlined_tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/box-enum-contract.algo.ts:4 // export class BoxContract extends arc4.Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/box-enum-contract.algo.ts:4 // export class BoxContract extends arc4.Contract { txn ApplicationID @@ -78,15 +91,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/box-enum-contract.algo.ts:4 - // export class BoxContract extends arc4.Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__@12 // tests/approvals/box-enum-contract.algo.ts::BoxContract.storeEnums() -> void: diff --git a/tests/approvals/out/box-enum-contract/BoxContract.arc32.json b/tests/approvals/out/box-enum-contract/BoxContract.arc32.json index 22a8ab52..db9cb2b3 100644 --- a/tests/approvals/out/box-enum-contract/BoxContract.arc32.json +++ b/tests/approvals/out/box-enum-contract/BoxContract.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAib2NhIiAidHhuIgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjI2YzZkNDIgLy8gbWV0aG9kICJzdG9yZV9lbnVtcygpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zdG9yZV9lbnVtc19yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3JlYWRfZW51bXNfcm91dGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N0b3JlX2VudW1zX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAnc3RvcmVfZW51bXMnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0b3JlRW51bXMKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3JlYWRfZW51bXNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAncmVhZF9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZEVudW1zCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5zdG9yZUVudW1zKCkgLT4gdm9pZDoKc3RvcmVFbnVtczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjgtOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgbmFtZTogJ3N0b3JlX2VudW1zJyB9KQogICAgLy8gcHVibGljIHN0b3JlRW51bXMoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9jYS52YWx1ZSA9IGFyYzQuT25Db21wbGV0ZUFjdGlvbi5PcHRJbgogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9jYS52YWx1ZSA9IGFyYzQuT25Db21wbGV0ZUFjdGlvbi5PcHRJbgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHhuLnZhbHVlID0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgcHVzaGludCA2IC8vIDYKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR4bi52YWx1ZSA9IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5yZWFkRW51bXMoKSAtPiBieXRlczoKcmVhZEVudW1zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IG5hbWU6ICdyZWFkX2VudW1zJyB9KQogICAgLy8gcHVibGljIHJlYWRFbnVtcygpOiBUdXBsZTxbVWludE42NCwgVWludE42NF0+IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCdvY2EnKSlbMF0gPT09IG9wLml0b2IodGhpcy5vY2EudmFsdWUpKQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo1CiAgICAvLyBvY2EgPSBCb3g8YXJjNC5PbkNvbXBsZXRlQWN0aW9uPih7IGtleTogQnl0ZXMoJ29jYScpIH0pCiAgICBieXRlY18wIC8vICJvY2EiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ29jYScpKVswXSA9PT0gb3AuaXRvYih0aGlzLm9jYS52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCd0eG4nKSlbMF0gPT09IG9wLml0b2IodGhpcy50eG4udmFsdWUpKQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ3R4bicpKVswXSA9PT0gb3AuaXRvYih0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvY2EiICJ0eG4iCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjI2YzZkNDIgLy8gbWV0aG9kICJzdG9yZV9lbnVtcygpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3N0b3JlX2VudW1zX3JvdXRlQDMgbWFpbl9yZWFkX2VudW1zX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX3JlYWRfZW51bXNfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAncmVhZF9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZEVudW1zCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fc3RvcmVfZW51bXNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IG5hbWU6ICdzdG9yZV9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcmVFbnVtcwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnN0b3JlRW51bXMoKSAtPiB2b2lkOgpzdG9yZUVudW1zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OC05CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAnc3RvcmVfZW51bXMnIH0pCiAgICAvLyBwdWJsaWMgc3RvcmVFbnVtcygpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBwdXNoaW50IDYgLy8gNgogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHhuLnZhbHVlID0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnJlYWRFbnVtcygpIC0+IGJ5dGVzOgpyZWFkRW51bXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgbmFtZTogJ3JlYWRfZW51bXMnIH0pCiAgICAvLyBwdWJsaWMgcmVhZEVudW1zKCk6IFR1cGxlPFtVaW50TjY0LCBVaW50TjY0XT4gewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ29jYScpKVswXSA9PT0gb3AuaXRvYih0aGlzLm9jYS52YWx1ZSkpCiAgICBieXRlY18wIC8vICJvY2EiCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygnb2NhJykpWzBdID09PSBvcC5pdG9iKHRoaXMub2NhLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ3R4bicpKVswXSA9PT0gb3AuaXRvYih0aGlzLnR4bi52YWx1ZSkpCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygndHhuJykpWzBdID09PSBvcC5pdG9iKHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo1CiAgICAvLyBvY2EgPSBCb3g8YXJjNC5PbkNvbXBsZXRlQWN0aW9uPih7IGtleTogQnl0ZXMoJ29jYScpIH0pCiAgICBieXRlY18wIC8vICJvY2EiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxOQogICAgLy8gcmV0dXJuIG5ldyBUdXBsZShuZXcgVWludE42NCh0aGlzLm9jYS52YWx1ZSksIG5ldyBVaW50TjY0KHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxOQogICAgLy8gcmV0dXJuIG5ldyBUdXBsZShuZXcgVWludE42NCh0aGlzLm9jYS52YWx1ZSksIG5ldyBVaW50TjY0KHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/box-enum-contract/BoxContract.arc56.json b/tests/approvals/out/box-enum-contract/BoxContract.arc56.json index 45c0648e..6f425b7d 100644 --- a/tests/approvals/out/box-enum-contract/BoxContract.arc56.json +++ b/tests/approvals/out/box-enum-contract/BoxContract.arc56.json @@ -84,30 +84,30 @@ "sourceInfo": [ { "pc": [ - 146, - 158, - 167, - 174 + 139, + 151, + 160, + 167 ], "errorMessage": "Box must have value" }, { "pc": [ - 59, - 74 + 51, + 77 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 112 + 105 ], "errorMessage": "can only call when creating" }, { "pc": [ - 64, - 79 + 56, + 82 ], "errorMessage": "can only call when not creating" } @@ -120,8 +120,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAib2NhIiAidHhuIgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjI2YzZkNDIgLy8gbWV0aG9kICJzdG9yZV9lbnVtcygpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zdG9yZV9lbnVtc19yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3JlYWRfZW51bXNfcm91dGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N0b3JlX2VudW1zX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAnc3RvcmVfZW51bXMnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0b3JlRW51bXMKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3JlYWRfZW51bXNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAncmVhZF9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZEVudW1zCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5zdG9yZUVudW1zKCkgLT4gdm9pZDoKc3RvcmVFbnVtczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjgtOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgbmFtZTogJ3N0b3JlX2VudW1zJyB9KQogICAgLy8gcHVibGljIHN0b3JlRW51bXMoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9jYS52YWx1ZSA9IGFyYzQuT25Db21wbGV0ZUFjdGlvbi5PcHRJbgogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9jYS52YWx1ZSA9IGFyYzQuT25Db21wbGV0ZUFjdGlvbi5PcHRJbgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHhuLnZhbHVlID0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgcHVzaGludCA2IC8vIDYKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR4bi52YWx1ZSA9IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5yZWFkRW51bXMoKSAtPiBieXRlczoKcmVhZEVudW1zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IG5hbWU6ICdyZWFkX2VudW1zJyB9KQogICAgLy8gcHVibGljIHJlYWRFbnVtcygpOiBUdXBsZTxbVWludE42NCwgVWludE42NF0+IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCdvY2EnKSlbMF0gPT09IG9wLml0b2IodGhpcy5vY2EudmFsdWUpKQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo1CiAgICAvLyBvY2EgPSBCb3g8YXJjNC5PbkNvbXBsZXRlQWN0aW9uPih7IGtleTogQnl0ZXMoJ29jYScpIH0pCiAgICBieXRlY18wIC8vICJvY2EiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ29jYScpKVswXSA9PT0gb3AuaXRvYih0aGlzLm9jYS52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCd0eG4nKSlbMF0gPT09IG9wLml0b2IodGhpcy50eG4udmFsdWUpKQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ3R4bicpKVswXSA9PT0gb3AuaXRvYih0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJveENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvY2EiICJ0eG4iCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjI2YzZkNDIgLy8gbWV0aG9kICJzdG9yZV9lbnVtcygpdm9pZCIKICAgIHB1c2hieXRlcyAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3N0b3JlX2VudW1zX3JvdXRlQDMgbWFpbl9yZWFkX2VudW1zX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyOgogICAgcmV0dXJuCgptYWluX3JlYWRfZW51bXNfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAncmVhZF9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcmVhZEVudW1zCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo6Qm94Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fc3RvcmVfZW51bXNfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IG5hbWU6ICdzdG9yZV9lbnVtcycgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcmVFbnVtcwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEwOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnN0b3JlRW51bXMoKSAtPiB2b2lkOgpzdG9yZUVudW1zOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OC05CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBuYW1lOiAnc3RvcmVfZW51bXMnIH0pCiAgICAvLyBwdWJsaWMgc3RvcmVFbnVtcygpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBwdXNoaW50IDYgLy8gNgogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHhuLnZhbHVlID0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2JveC1lbnVtLWNvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnJlYWRFbnVtcygpIC0+IGJ5dGVzOgpyZWFkRW51bXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgbmFtZTogJ3JlYWRfZW51bXMnIH0pCiAgICAvLyBwdWJsaWMgcmVhZEVudW1zKCk6IFR1cGxlPFtVaW50TjY0LCBVaW50TjY0XT4gewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ29jYScpKVswXSA9PT0gb3AuaXRvYih0aGlzLm9jYS52YWx1ZSkpCiAgICBieXRlY18wIC8vICJvY2EiCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygnb2NhJykpWzBdID09PSBvcC5pdG9iKHRoaXMub2NhLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxNwogICAgLy8gYXNzZXJ0KG9wLkJveC5nZXQoQnl0ZXMoJ3R4bicpKVswXSA9PT0gb3AuaXRvYih0aGlzLnR4bi52YWx1ZSkpCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygndHhuJykpWzBdID09PSBvcC5pdG9iKHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo1CiAgICAvLyBvY2EgPSBCb3g8YXJjNC5PbkNvbXBsZXRlQWN0aW9uPih7IGtleTogQnl0ZXMoJ29jYScpIH0pCiAgICBieXRlY18wIC8vICJvY2EiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxOQogICAgLy8gcmV0dXJuIG5ldyBUdXBsZShuZXcgVWludE42NCh0aGlzLm9jYS52YWx1ZSksIG5ldyBVaW50TjY0KHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czoxOQogICAgLy8gcmV0dXJuIG5ldyBUdXBsZShuZXcgVWludE42NCh0aGlzLm9jYS52YWx1ZSksIG5ldyBVaW50TjY0KHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ib3gtZW51bS1jb250cmFjdC5hbGdvLnRzOjpCb3hDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYm94LWVudW0tY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAgNvY2EDdHhuMRsiE0EARDYaAIAE8mxtQoAE7xhs908CjgIAHAACIkMxGSISRDEYIhNEiABEgAQVH3x1TFCwI0L/5TEZIhJEMRgiE0SIABsjQv/UMRkiTI4BAANC/8gxGCISRIgARCNC/72KAAAjFihMv4EGFilMv4mKAAEovkgovkwXTEQWEkQpvkgpvkwXTEQWEkQovkwXTEQWKb5MF0xEFoAATwJQTFCJigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/box-enum-contract/BoxContract.clear.teal b/tests/approvals/out/box-enum-contract/BoxContract.clear.teal index dd7ebb1f..a4d58047 100644 --- a/tests/approvals/out/box-enum-contract/BoxContract.clear.teal +++ b/tests/approvals/out/box-enum-contract/BoxContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/box-enum-contract.algo.ts::BoxContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.approval.0.ssa.ir b/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.approval.0.ssa.ir new file mode 100644 index 00000000..ef0392a6 --- /dev/null +++ b/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.approval.0.ssa.ir @@ -0,0 +1,94 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "store_enums()void" => block@2, method "read_enums()(uint64,uint64)" => block@3, * => block@4} + block@2: // store_enums_route_L8 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/box-enum-contract.algo.ts::BoxContract.storeEnums() + return 1u + block@3: // read_enums_route_L14 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + let tmp%11#0: bytes = tests/approvals/box-enum-contract.algo.ts::BoxContract.readEnums() + let tmp%12#0: bytes = (concat 0x151f7c75 tmp%11#0) + (log tmp%12#0) + return 1u + block@4: // switch_case_default_L4 + goto block@5 + block@5: // switch_case_next_L4 + goto block@10 + block@6: // bare_routing_L4 + let tmp%13#0: uint64 = (txn OnCompletion) + switch tmp%13#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L4 + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (== tmp%14#0 0u) + (assert tmp%15#0) // can only call when creating + tests/approvals/box-enum-contract.algo.ts::BoxContract.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L4 + goto block@9 + block@9: // switch_case_next_L4 + goto block@10 + block@10: // after_if_else_L4 + return 0u + +subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.storeEnums() -> void: + block@0: // L8 + let new_box_value%0#0: bytes = (itob 1u) + (box_put "oca" new_box_value%0#0) + let new_box_value%1#0: bytes = (itob 6u) + (box_put "txn" new_box_value%1#0) + return + +subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.readEnums() -> bytes: + block@0: // L14 + let (tmp%0#0: bytes, tmp%1#0: bool) = (box_get "oca") + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get "oca") + let maybe_value_converted%0#0: uint64 = (btoi maybe_value%0#0) + (assert maybe_exists%0#0) // Box must have value + let tmp%2#0: bytes = (itob maybe_value_converted%0#0) + let tmp%3#0: bool = (== tmp%0#0 tmp%2#0) + (assert tmp%3#0) + let (tmp%4#0: bytes, tmp%5#0: bool) = (box_get "txn") + let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get "txn") + let maybe_value_converted%1#0: uint64 = (btoi maybe_value%1#0) + (assert maybe_exists%1#0) // Box must have value + let tmp%6#0: bytes = (itob maybe_value_converted%1#0) + let tmp%7#0: bool = (== tmp%4#0 tmp%6#0) + (assert tmp%7#0) + let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get "oca") + let maybe_value_converted%2#0: uint64 = (btoi maybe_value%2#0) + (assert maybe_exists%2#0) // Box must have value + let val_as_bytes%0#0: bytes = (itob maybe_value_converted%2#0) + let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get "txn") + let maybe_value_converted%3#0: uint64 = (btoi maybe_value%3#0) + (assert maybe_exists%3#0) // Box must have value + let val_as_bytes%1#0: bytes = (itob maybe_value_converted%3#0) + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) + return encoded_tuple_buffer%2#0 + +subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.clear.0.ssa.ir b/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/box-enum-contract/BoxContract.ir/BoxContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/box-enum-contract/BoxContract.ssa.ir b/tests/approvals/out/box-enum-contract/BoxContract.ssa.ir deleted file mode 100644 index 201000e7..00000000 --- a/tests/approvals/out/box-enum-contract/BoxContract.ssa.ir +++ /dev/null @@ -1,101 +0,0 @@ -contract tests/approvals/box-enum-contract.algo.ts::BoxContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "store_enums()void" => block@2, method "read_enums()(uint64,uint64)" => block@3, * => block@4} - block@2: // store_enums_route_L8 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/box-enum-contract.algo.ts::BoxContract.storeEnums() - return 1u - block@3: // read_enums_route_L14 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 NoOp) - (assert tmp%8#0) // OnCompletion is not NoOp - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (!= tmp%9#0 0u) - (assert tmp%10#0) // can only call when not creating - let tmp%11#0: bytes = tests/approvals/box-enum-contract.algo.ts::BoxContract.readEnums() - let tmp%12#0: bytes = (concat 0x151f7c75 tmp%11#0) - (log tmp%12#0) - return 1u - block@4: // switch_case_default_L4 - goto block@5 - block@5: // switch_case_next_L4 - goto block@10 - block@6: // bare_routing_L4 - let tmp%13#0: uint64 = (txn OnCompletion) - switch tmp%13#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L4 - let tmp%14#0: uint64 = (txn ApplicationID) - let tmp%15#0: bool = (== tmp%14#0 0u) - (assert tmp%15#0) // can only call when creating - tests/approvals/box-enum-contract.algo.ts::BoxContract.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L4 - goto block@9 - block@9: // switch_case_next_L4 - goto block@10 - block@10: // after_if_else_L4 - return 0u - - subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.storeEnums() -> void: - block@0: // L8 - let new_box_value%0#0: bytes = (itob 1u) - (box_put "oca" new_box_value%0#0) - let new_box_value%1#0: bytes = (itob 6u) - (box_put "txn" new_box_value%1#0) - return - - subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.readEnums() -> bytes: - block@0: // L14 - let (tmp%0#0: bytes, tmp%1#0: bool) = (box_get "oca") - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get "oca") - let maybe_value_converted%0#0: uint64 = (btoi maybe_value%0#0) - (assert maybe_exists%0#0) // Box must have value - let tmp%2#0: bytes = (itob maybe_value_converted%0#0) - let tmp%3#0: bool = (== tmp%0#0 tmp%2#0) - (assert tmp%3#0) - let (tmp%4#0: bytes, tmp%5#0: bool) = (box_get "txn") - let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get "txn") - let maybe_value_converted%1#0: uint64 = (btoi maybe_value%1#0) - (assert maybe_exists%1#0) // Box must have value - let tmp%6#0: bytes = (itob maybe_value_converted%1#0) - let tmp%7#0: bool = (== tmp%4#0 tmp%6#0) - (assert tmp%7#0) - let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get "oca") - let maybe_value_converted%2#0: uint64 = (btoi maybe_value%2#0) - (assert maybe_exists%2#0) // Box must have value - let val_as_bytes%0#0: bytes = (itob maybe_value_converted%2#0) - let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get "txn") - let maybe_value_converted%3#0: uint64 = (btoi maybe_value%3#0) - (assert maybe_exists%3#0) // Box must have value - let val_as_bytes%1#0: bytes = (itob maybe_value_converted%3#0) - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) - return encoded_tuple_buffer%2#0 - - subroutine tests/approvals/box-enum-contract.algo.ts::BoxContract.__algots__.defaultCreate() -> void: - block@0: // L4 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/box-proxies/BoxContract.approval.teal b/tests/approvals/out/box-proxies/BoxContract.approval.teal index a1f2e6ff..1a241fd3 100644 --- a/tests/approvals/out/box-proxies/BoxContract.approval.teal +++ b/tests/approvals/out/box-proxies/BoxContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/box-proxies.algo.ts::BoxContract.approvalProgram: +// tests/approvals/box-proxies.algo.ts::BoxContract.approvalProgram() -> uint64: +main: intcblock 1 0 4 bytecblock "A" "" "abc" "O" 0xffffffff // tests/approvals/box-proxies.algo.ts:74 @@ -9,6 +11,8 @@ tests/approvals/box-proxies.algo.ts::BoxContract.approvalProgram: intc_1 // 0 != bz main_after_if_else@2 + +main_if_body@1: // tests/approvals/box-proxies.algo.ts:69 // boxOne = Box({ key: 'one' }) pushbytes "one" @@ -90,6 +94,8 @@ testBox: box_len bury 1 bz testBox_bool_false@3 + +testBox_and_contd@1: // tests/approvals/box-proxies.algo.ts:5 // const boxA = Box({ key: Bytes('A') }) bytec_0 // "A" @@ -98,11 +104,9 @@ testBox: box_len bury 1 bz testBox_bool_false@3 - intc_0 // 1 - b testBox_bool_merge@4 -testBox_bool_false@3: - intc_1 // 0 +testBox_bool_true@2: + intc_0 // 1 testBox_bool_merge@4: // tests/approvals/box-proxies.algo.ts:12 @@ -132,6 +136,8 @@ testBox_bool_merge@4: box_len bury 1 bnz testBox_bool_false@7 + +testBox_and_contd@5: // tests/approvals/box-proxies.algo.ts:5 // const boxA = Box({ key: Bytes('A') }) bytec_0 // "A" @@ -140,11 +146,9 @@ testBox_bool_merge@4: box_len bury 1 bnz testBox_bool_false@7 - intc_0 // 1 - b testBox_bool_merge@8 -testBox_bool_false@7: - intc_1 // 0 +testBox_bool_true@6: + intc_0 // 1 testBox_bool_merge@8: // tests/approvals/box-proxies.algo.ts:18 @@ -205,6 +209,14 @@ testBox_bool_merge@8: assert retsub +testBox_bool_false@7: + intc_1 // 0 + b testBox_bool_merge@8 + +testBox_bool_false@3: + intc_1 // 0 + b testBox_bool_merge@4 + // tests/approvals/box-proxies.algo.ts::testBoxMap(box: bytes, key: bytes, value: bytes) -> void: testBoxMap: @@ -326,6 +338,8 @@ testBoxRef: box_len bury 1 bnz testBoxRef_else_body@2 + +testBoxRef_if_body@1: // tests/approvals/box-proxies.algo.ts:47 // const boxRef = BoxRef({ key: 'abc' }) bytec_2 // "abc" @@ -334,28 +348,6 @@ testBoxRef: pushint 1000 // 1000 box_create pop - b testBoxRef_after_if_else@5 - -testBoxRef_else_body@2: - // tests/approvals/box-proxies.algo.ts:47 - // const boxRef = BoxRef({ key: 'abc' }) - bytec_2 // "abc" - // tests/approvals/box-proxies.algo.ts:52 - // } else if (boxRef.length !== length) { - box_len - assert // Box must have value - frame_dig -1 - != - bz testBoxRef_after_if_else@4 - // tests/approvals/box-proxies.algo.ts:47 - // const boxRef = BoxRef({ key: 'abc' }) - bytec_2 // "abc" - // tests/approvals/box-proxies.algo.ts:53 - // boxRef.resize(length) - frame_dig -1 - box_resize - -testBoxRef_after_if_else@4: testBoxRef_after_if_else@5: // tests/approvals/box-proxies.algo.ts:55 @@ -364,20 +356,13 @@ testBoxRef_after_if_else@5: box_len bury 1 bz testBoxRef_else_body@7 + +testBoxRef_if_body@6: // tests/approvals/box-proxies.algo.ts:56 // box.resize(4) frame_dig -2 intc_2 // 4 box_resize - b testBoxRef_after_if_else@8 - -testBoxRef_else_body@7: - // tests/approvals/box-proxies.algo.ts:58 - // box.create({ size: 4 }) - frame_dig -2 - intc_2 // 4 - box_create - pop testBoxRef_after_if_else@8: // tests/approvals/box-proxies.algo.ts:61 @@ -413,3 +398,36 @@ testBoxRef_after_if_else@8: == assert retsub + +testBoxRef_else_body@7: + // tests/approvals/box-proxies.algo.ts:58 + // box.create({ size: 4 }) + frame_dig -2 + intc_2 // 4 + box_create + pop + b testBoxRef_after_if_else@8 + +testBoxRef_else_body@2: + // tests/approvals/box-proxies.algo.ts:47 + // const boxRef = BoxRef({ key: 'abc' }) + bytec_2 // "abc" + // tests/approvals/box-proxies.algo.ts:52 + // } else if (boxRef.length !== length) { + box_len + assert // Box must have value + frame_dig -1 + != + bz testBoxRef_after_if_else@4 + +testBoxRef_if_body@3: + // tests/approvals/box-proxies.algo.ts:47 + // const boxRef = BoxRef({ key: 'abc' }) + bytec_2 // "abc" + // tests/approvals/box-proxies.algo.ts:53 + // boxRef.resize(length) + frame_dig -1 + box_resize + +testBoxRef_after_if_else@4: + b testBoxRef_after_if_else@5 diff --git a/tests/approvals/out/box-proxies/BoxContract.clear.teal b/tests/approvals/out/box-proxies/BoxContract.clear.teal index 21d4bc85..a4d58047 100644 --- a/tests/approvals/out/box-proxies/BoxContract.clear.teal +++ b/tests/approvals/out/box-proxies/BoxContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/box-proxies.algo.ts::BoxContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.approval.0.ssa.ir b/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.approval.0.ssa.ir new file mode 100644 index 00000000..e41b21fd --- /dev/null +++ b/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.approval.0.ssa.ir @@ -0,0 +1,159 @@ +main tests/approvals/box-proxies.algo.ts::BoxContract.approvalProgram: + block@0: // L73 + let tmp%0#0: uint64 = (txn ApplicationID) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@2 + block@1: // if_body_L74 + tests/approvals/box-proxies.algo.ts::testBox("one", "aaaaaargh") + let tmp%2#0: bytes = (itob 256456u) + tests/approvals/box-proxies.algo.ts::testBoxMap("two", "what?", tmp%2#0) + tests/approvals/box-proxies.algo.ts::testBoxRef("three", 99u) + goto block@2 + block@2: // after_if_else_L74 + return 1u + +subroutine tests/approvals/box-proxies.algo.ts::testBox(box: bytes, value: bytes) -> void: + block@0: // L6 + (box_del box#0) + (box_put box#0 value#0) + (box_del "A") + (box_put "A" value#0) + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get box#0) + (assert maybe_exists%0#0) // Box must have value + let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get "A") + (assert maybe_exists%1#0) // Box must have value + let tmp%0#0: bool = (== maybe_value%0#0 maybe_value%1#0) + (assert tmp%0#0) + let (maybe_value%2#0: uint64, maybe_exists%2#0: bool) = (box_len box#0) + goto maybe_exists%2#0 ? block@1 : block@3 + block@1: // and_contd_L12 + let (maybe_value%3#0: uint64, maybe_exists%3#0: bool) = (box_len "A") + goto maybe_exists%3#0 ? block@2 : block@3 + block@2: // bool_true_L12 + let and_result%0#0: bool = 1u + goto block@4 + block@3: // bool_false_L12 + let and_result%0#1: bool = 0u + goto block@4 + block@4: // bool_merge_L12 + let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) + (assert and_result%0#2) + let (value%0#0: uint64, check%0#0: bool) = (box_len box#0) + (assert check%0#0) // Box must have value + let reinterpret_bool%0#0: bool = value%0#0 + (assert reinterpret_bool%0#0) + (box_del box#0) + (box_del "A") + let (maybe_value%4#0: uint64, maybe_exists%4#0: bool) = (box_len box#0) + goto maybe_exists%4#0 ? block@7 : block@5 + block@5: // and_contd_L18 + let (maybe_value%5#0: uint64, maybe_exists%5#0: bool) = (box_len "A") + goto maybe_exists%5#0 ? block@7 : block@6 + block@6: // bool_true_L18 + let and_result%1#0: bool = 1u + goto block@8 + block@7: // bool_false_L18 + let and_result%1#1: bool = 0u + goto block@8 + block@8: // bool_merge_L18 + let and_result%1#2: bool = φ(and_result%1#0 <- block@6, and_result%1#1 <- block@7) + (assert and_result%1#2) + let defaultVal#0: bytes = "O" + let (maybe_value%6#0: bytes, maybe_exists%6#0: bool) = (box_get "A") + let tmp%1#0: bytes = (select defaultVal#0 maybe_value%6#0 maybe_exists%6#0) + let (maybe_value%7#0: bytes, maybe_exists%7#0: bool) = (box_get box#0) + let tmp%2#0: bytes = (select defaultVal#0 maybe_value%7#0 maybe_exists%7#0) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let (maybe_value%8#0: bytes, maybe_exists%8#0: bool) = (box_get box#0) + let _#0: bytes = maybe_value%8#0 + let e#0: bool = maybe_exists%8#0 + let tmp%4#0: bool = (! e#0) + (assert tmp%4#0) + (box_del box#0) + (box_put box#0 value#0) + let (maybe_value%9#0: bytes, maybe_exists%9#0: bool) = (box_get box#0) + let _₁#0: bytes = maybe_value%9#0 + let e#1: bool = maybe_exists%9#0 + (assert e#1) + return + +subroutine tests/approvals/box-proxies.algo.ts::testBoxMap(box: bytes, key: bytes, value: bytes) -> void: + block@0: // L32 + let tmp%0#0: bytes = (concat box#0 key#0) + (box_del tmp%0#0) + (box_put tmp%0#0 value#0) + let tmp%1#0: bytes = (concat "" key#0) + (box_del tmp%1#0) + (box_put tmp%1#0 value#0) + let tmp%2#0: bytes = (concat box#0 key#0) + let (value%0#0: uint64, check%0#0: bool) = (box_len tmp%2#0) + (assert check%0#0) // Box must have value + let reinterpret_bool%0#0: bool = value%0#0 + (assert reinterpret_bool%0#0) + let tmp%3#0: bytes = (concat box#0 key#0) + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get tmp%3#0) + (assert maybe_exists%0#0) + let tmp%4#0: bytes = (concat box#0 key#0) + let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get tmp%4#0) + (assert maybe_exists%1#0) // Box must have value + let tmp%5#0: bytes = (concat "" key#0) + let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get tmp%5#0) + (assert maybe_exists%2#0) // Box must have value + let tmp%6#0: bool = (== maybe_value%1#0 maybe_value%2#0) + (assert tmp%6#0) + let tmp%7#0: bytes = (concat box#0 key#0) + (box_del tmp%7#0) + let tmp%8#0: bytes = (concat "" key#0) + let tmp%9#0: bytes = (concat tmp%8#0 "x") + let tmp%10#0: bytes = (concat box#0 tmp%9#0) + let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get tmp%10#0) + let tmp%11#0: bytes = (select "b" maybe_value%3#0 maybe_exists%3#0) + let tmp%12#0: bytes = (concat "" key#0) + let tmp%13#0: bytes = (concat tmp%12#0 "x") + let tmp%14#0: bytes = (concat "" tmp%13#0) + let (maybe_value%4#0: bytes, maybe_exists%4#0: bool) = (box_get tmp%14#0) + let tmp%15#0: bytes = (select "b" maybe_value%4#0 maybe_exists%4#0) + let tmp%16#0: bool = (== tmp%11#0 tmp%15#0) + (assert tmp%16#0) + return + +subroutine tests/approvals/box-proxies.algo.ts::testBoxRef(box: bytes, length: uint64) -> void: + block@0: // L49 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (box_len "abc") + goto maybe_exists%0#0 ? block@2 : block@1 + block@1: // if_body_L50 + (box_create "abc" 1000u) + goto block@5 + block@2: // else_body_L52 + let (value%0#0: uint64, check%0#0: bool) = (box_len "abc") + (assert check%0#0) // Box must have value + let tmp%0#0: bool = (!= value%0#0 length#0) + goto tmp%0#0 ? block@3 : block@4 + block@3: // if_body_L52 + (box_resize "abc" length#0) + goto block@4 + block@4: // after_if_else_L52 + goto block@5 + block@5: // after_if_else_L50 + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (box_len box#0) + goto maybe_exists%1#0 ? block@6 : block@7 + block@6: // if_body_L55 + (box_resize box#0 4u) + goto block@8 + block@7: // else_body_L57 + (box_create box#0 4u) + goto block@8 + block@8: // after_if_else_L55 + let someBytes#0: bytes = 0xffffffff + (box_put box#0 someBytes#0) + let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get box#0) + (assert maybe_exists%2#0) // Box must have value + let tmp%1#0: bool = (== maybe_value%2#0 0xffffffff) + (assert tmp%1#0) + (box_splice box#0 1u 1u 0x00) + let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get box#0) + (assert maybe_exists%3#0) // Box must have value + let tmp%2#0: bool = (== maybe_value%3#0 0xff00ffff) + (assert tmp%2#0) + return \ No newline at end of file diff --git a/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.clear.0.ssa.ir b/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/box-proxies/BoxContract.ir/BoxContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/box-proxies/BoxContract.ssa.ir b/tests/approvals/out/box-proxies/BoxContract.ssa.ir deleted file mode 100644 index 0a7208f6..00000000 --- a/tests/approvals/out/box-proxies/BoxContract.ssa.ir +++ /dev/null @@ -1,166 +0,0 @@ -contract tests/approvals/box-proxies.algo.ts::BoxContract: - program approval: - subroutine tests/approvals/box-proxies.algo.ts::BoxContract.approvalProgram() -> bool: - block@0: // L73 - let tmp%0#0: uint64 = (txn ApplicationID) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@2 - block@1: // if_body_L74 - tests/approvals/box-proxies.algo.ts::testBox("one", "aaaaaargh") - let tmp%2#0: bytes = (itob 256456u) - tests/approvals/box-proxies.algo.ts::testBoxMap("two", "what?", tmp%2#0) - tests/approvals/box-proxies.algo.ts::testBoxRef("three", 99u) - goto block@2 - block@2: // after_if_else_L74 - return 1u - - subroutine tests/approvals/box-proxies.algo.ts::testBox(box: bytes, value: bytes) -> void: - block@0: // L6 - (box_del box#0) - (box_put box#0 value#0) - (box_del "A") - (box_put "A" value#0) - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get box#0) - (assert maybe_exists%0#0) // Box must have value - let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get "A") - (assert maybe_exists%1#0) // Box must have value - let tmp%0#0: bool = (== maybe_value%0#0 maybe_value%1#0) - (assert tmp%0#0) - let (maybe_value%2#0: uint64, maybe_exists%2#0: bool) = (box_len box#0) - goto maybe_exists%2#0 ? block@1 : block@3 - block@1: // and_contd_L12 - let (maybe_value%3#0: uint64, maybe_exists%3#0: bool) = (box_len "A") - goto maybe_exists%3#0 ? block@2 : block@3 - block@2: // bool_true_L12 - let and_result%0#0: bool = 1u - goto block@4 - block@3: // bool_false_L12 - let and_result%0#1: bool = 0u - goto block@4 - block@4: // bool_merge_L12 - let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) - (assert and_result%0#2) - let (value%0#0: uint64, check%0#0: bool) = (box_len box#0) - (assert check%0#0) // Box must have value - let reinterpret_bool%0#0: bool = value%0#0 - (assert reinterpret_bool%0#0) - (box_del box#0) - (box_del "A") - let (maybe_value%4#0: uint64, maybe_exists%4#0: bool) = (box_len box#0) - goto maybe_exists%4#0 ? block@7 : block@5 - block@5: // and_contd_L18 - let (maybe_value%5#0: uint64, maybe_exists%5#0: bool) = (box_len "A") - goto maybe_exists%5#0 ? block@7 : block@6 - block@6: // bool_true_L18 - let and_result%1#0: bool = 1u - goto block@8 - block@7: // bool_false_L18 - let and_result%1#1: bool = 0u - goto block@8 - block@8: // bool_merge_L18 - let and_result%1#2: bool = φ(and_result%1#0 <- block@6, and_result%1#1 <- block@7) - (assert and_result%1#2) - let defaultVal#0: bytes = "O" - let (maybe_value%6#0: bytes, maybe_exists%6#0: bool) = (box_get "A") - let tmp%1#0: bytes = (select defaultVal#0 maybe_value%6#0 maybe_exists%6#0) - let (maybe_value%7#0: bytes, maybe_exists%7#0: bool) = (box_get box#0) - let tmp%2#0: bytes = (select defaultVal#0 maybe_value%7#0 maybe_exists%7#0) - let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) - (assert tmp%3#0) - let (maybe_value%8#0: bytes, maybe_exists%8#0: bool) = (box_get box#0) - let _#0: bytes = maybe_value%8#0 - let e#0: bool = maybe_exists%8#0 - let tmp%4#0: bool = (! e#0) - (assert tmp%4#0) - (box_del box#0) - (box_put box#0 value#0) - let (maybe_value%9#0: bytes, maybe_exists%9#0: bool) = (box_get box#0) - let _₁#0: bytes = maybe_value%9#0 - let e#1: bool = maybe_exists%9#0 - (assert e#1) - return - - subroutine tests/approvals/box-proxies.algo.ts::testBoxMap(box: bytes, key: bytes, value: bytes) -> void: - block@0: // L32 - let tmp%0#0: bytes = (concat box#0 key#0) - (box_del tmp%0#0) - (box_put tmp%0#0 value#0) - let tmp%1#0: bytes = (concat "" key#0) - (box_del tmp%1#0) - (box_put tmp%1#0 value#0) - let tmp%2#0: bytes = (concat box#0 key#0) - let (value%0#0: uint64, check%0#0: bool) = (box_len tmp%2#0) - (assert check%0#0) // Box must have value - let reinterpret_bool%0#0: bool = value%0#0 - (assert reinterpret_bool%0#0) - let tmp%3#0: bytes = (concat box#0 key#0) - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (box_get tmp%3#0) - (assert maybe_exists%0#0) - let tmp%4#0: bytes = (concat box#0 key#0) - let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (box_get tmp%4#0) - (assert maybe_exists%1#0) // Box must have value - let tmp%5#0: bytes = (concat "" key#0) - let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get tmp%5#0) - (assert maybe_exists%2#0) // Box must have value - let tmp%6#0: bool = (== maybe_value%1#0 maybe_value%2#0) - (assert tmp%6#0) - let tmp%7#0: bytes = (concat box#0 key#0) - (box_del tmp%7#0) - let tmp%8#0: bytes = (concat "" key#0) - let tmp%9#0: bytes = (concat tmp%8#0 "x") - let tmp%10#0: bytes = (concat box#0 tmp%9#0) - let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get tmp%10#0) - let tmp%11#0: bytes = (select "b" maybe_value%3#0 maybe_exists%3#0) - let tmp%12#0: bytes = (concat "" key#0) - let tmp%13#0: bytes = (concat tmp%12#0 "x") - let tmp%14#0: bytes = (concat "" tmp%13#0) - let (maybe_value%4#0: bytes, maybe_exists%4#0: bool) = (box_get tmp%14#0) - let tmp%15#0: bytes = (select "b" maybe_value%4#0 maybe_exists%4#0) - let tmp%16#0: bool = (== tmp%11#0 tmp%15#0) - (assert tmp%16#0) - return - - subroutine tests/approvals/box-proxies.algo.ts::testBoxRef(box: bytes, length: uint64) -> void: - block@0: // L49 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (box_len "abc") - goto maybe_exists%0#0 ? block@2 : block@1 - block@1: // if_body_L50 - (box_create "abc" 1000u) - goto block@5 - block@2: // else_body_L52 - let (value%0#0: uint64, check%0#0: bool) = (box_len "abc") - (assert check%0#0) // Box must have value - let tmp%0#0: bool = (!= value%0#0 length#0) - goto tmp%0#0 ? block@3 : block@4 - block@3: // if_body_L52 - (box_resize "abc" length#0) - goto block@4 - block@4: // after_if_else_L52 - goto block@5 - block@5: // after_if_else_L50 - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (box_len box#0) - goto maybe_exists%1#0 ? block@6 : block@7 - block@6: // if_body_L55 - (box_resize box#0 4u) - goto block@8 - block@7: // else_body_L57 - (box_create box#0 4u) - goto block@8 - block@8: // after_if_else_L55 - let someBytes#0: bytes = 0xffffffff - (box_put box#0 someBytes#0) - let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (box_get box#0) - (assert maybe_exists%2#0) // Box must have value - let tmp%1#0: bool = (== maybe_value%2#0 0xffffffff) - (assert tmp%1#0) - (box_splice box#0 1u 1u 0x00) - let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (box_get box#0) - (assert maybe_exists%3#0) // Box must have value - let tmp%2#0: bool = (== maybe_value%3#0 0xff00ffff) - (assert tmp%2#0) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/byte-expressions/DemoContract.approval.teal b/tests/approvals/out/byte-expressions/DemoContract.approval.teal index 620bf74e..6fa20beb 100644 --- a/tests/approvals/out/byte-expressions/DemoContract.approval.teal +++ b/tests/approvals/out/byte-expressions/DemoContract.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/byte-expressions.algo.ts::DemoContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/byte-expressions.algo.ts:15 // class DemoContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/byte-expressions.algo.ts:15 + // class DemoContract extends Contract { txna ApplicationArgs 0 pushbytes 0xf59e3cc4 // method "test()bool" swap - match __puya_arc4_router___test_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_test_route@3 + +main_switch_case_default@4: -__puya_arc4_router___test_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/byte-expressions.algo.ts:15 + // class DemoContract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__@11: + return + +main_test_route@3: // tests/approvals/byte-expressions.algo.ts:16 // public test() { txn OnCompletion @@ -42,21 +54,22 @@ __puya_arc4_router___test_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/byte-expressions.algo.ts:15 // class DemoContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/byte-expressions.algo.ts:15 // class DemoContract extends Contract { txn ApplicationID @@ -65,15 +78,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/byte-expressions.algo.ts:15 - // class DemoContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__@11 // tests/approvals/byte-expressions.algo.ts::DemoContract.test() -> uint64: diff --git a/tests/approvals/out/byte-expressions/DemoContract.arc32.json b/tests/approvals/out/byte-expressions/DemoContract.arc32.json index fcfe0f29..993a6422 100644 --- a/tests/approvals/out/byte-expressions/DemoContract.arc32.json +++ b/tests/approvals/out/byte-expressions/DemoContract.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDcKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxNQogICAgLy8gY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KDEsIDUwbiwgJ3RoaW5ncycpCiAgICBpbnRjXzEgLy8gMQogICAgcHVzaGJ5dGVzIDB4MzIKICAgIHB1c2hieXRlcyAidGhpbmdzIgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjp0ZXN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3QoYTogdWludDY0LCBiOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjQKICAgIC8vIGZ1bmN0aW9uIHRlc3QoYTogdWludDY0LCBiOiBiaWd1aW50LCBjOiBzdHJpbmcpIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo1CiAgICAvLyBhc3NlcnQoQnl0ZXMoKS5sZW5ndGggPT09IDAsICdFbXB0eSBieXRlcyBoYXMgbGVuZ3RoIG9mIDAnKQogICAgcHVzaGJ5dGVzIDB4CiAgICBsZW4KICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIEVtcHR5IGJ5dGVzIGhhcyBsZW5ndGggb2YgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo2CiAgICAvLyBhc3NlcnQoQnl0ZXMoYSkgPT09IG9wLml0b2IoYSksICdCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYicpCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoQnl0ZXMoVWludDY0KDEpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDAwMDAwMDAwMDAwMDAwMScpLCAnQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZycpCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBkdXAKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo4CiAgICAvLyBhc3NlcnQoQnl0ZXMoQmlnVWludCgyNTYpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMCcpKQogICAgcHVzaGJ5dGVzIDB4MDEwMAogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydChCaWdVaW50KEJ5dGVzKGIpKSA9PT0gYiwgJ1JvdW5kIHRyaXAgb2YgYmlndWludCB0byBieXRlcyBhbmQgYmFjayByZXN1bHRzIGluIHRoZSBzYW1lIHZhbHVlJykKICAgIGZyYW1lX2RpZyAtMgogICAgZHVwCiAgICBiPT0KICAgIGFzc2VydCAvLyBSb3VuZCB0cmlwIG9mIGJpZ3VpbnQgdG8gYnl0ZXMgYW5kIGJhY2sgcmVzdWx0cyBpbiB0aGUgc2FtZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KFN0cmluZyhCeXRlcyhjKSkgPT09IGMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGR1cAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KEJ5dGVzKEJ5dGVzKCcxMjMnKSkgPT09IEJ5dGVzKCcxMjMnKSkKICAgIHB1c2hieXRlcyAiMTIzIgogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjEyCiAgICAvLyBhc3NlcnQoQnl0ZXMoWzEsIDIsIDMsIDRdKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMjAzMDQnKSkKICAgIHB1c2hieXRlcyAweDAxMDIwMzA0CiAgICBkdXAKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmNTllM2NjNCAvLyBtZXRob2QgInRlc3QoKWJvb2wiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgptYWluX3N3aXRjaF9jYXNlX25leHRAOToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEwCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxNQogICAgLy8gY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KDEsIDUwbiwgJ3RoaW5ncycpCiAgICBpbnRjXzEgLy8gMQogICAgcHVzaGJ5dGVzIDB4MzIKICAgIHB1c2hieXRlcyAidGhpbmdzIgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjp0ZXN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3QoYTogdWludDY0LCBiOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjQKICAgIC8vIGZ1bmN0aW9uIHRlc3QoYTogdWludDY0LCBiOiBiaWd1aW50LCBjOiBzdHJpbmcpIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo1CiAgICAvLyBhc3NlcnQoQnl0ZXMoKS5sZW5ndGggPT09IDAsICdFbXB0eSBieXRlcyBoYXMgbGVuZ3RoIG9mIDAnKQogICAgcHVzaGJ5dGVzIDB4CiAgICBsZW4KICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIEVtcHR5IGJ5dGVzIGhhcyBsZW5ndGggb2YgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo2CiAgICAvLyBhc3NlcnQoQnl0ZXMoYSkgPT09IG9wLml0b2IoYSksICdCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYicpCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoQnl0ZXMoVWludDY0KDEpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDAwMDAwMDAwMDAwMDAwMScpLCAnQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZycpCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBkdXAKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo4CiAgICAvLyBhc3NlcnQoQnl0ZXMoQmlnVWludCgyNTYpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMCcpKQogICAgcHVzaGJ5dGVzIDB4MDEwMAogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydChCaWdVaW50KEJ5dGVzKGIpKSA9PT0gYiwgJ1JvdW5kIHRyaXAgb2YgYmlndWludCB0byBieXRlcyBhbmQgYmFjayByZXN1bHRzIGluIHRoZSBzYW1lIHZhbHVlJykKICAgIGZyYW1lX2RpZyAtMgogICAgZHVwCiAgICBiPT0KICAgIGFzc2VydCAvLyBSb3VuZCB0cmlwIG9mIGJpZ3VpbnQgdG8gYnl0ZXMgYW5kIGJhY2sgcmVzdWx0cyBpbiB0aGUgc2FtZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KFN0cmluZyhCeXRlcyhjKSkgPT09IGMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGR1cAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KEJ5dGVzKEJ5dGVzKCcxMjMnKSkgPT09IEJ5dGVzKCcxMjMnKSkKICAgIHB1c2hieXRlcyAiMTIzIgogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjEyCiAgICAvLyBhc3NlcnQoQnl0ZXMoWzEsIDIsIDMsIDRdKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMjAzMDQnKSkKICAgIHB1c2hieXRlcyAweDAxMDIwMzA0CiAgICBkdXAKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/byte-expressions/DemoContract.arc56.json b/tests/approvals/out/byte-expressions/DemoContract.arc56.json index e977bf59..2a396c10 100644 --- a/tests/approvals/out/byte-expressions/DemoContract.arc56.json +++ b/tests/approvals/out/byte-expressions/DemoContract.arc56.json @@ -57,43 +57,43 @@ "sourceInfo": [ { "pc": [ - 129 + 120 ], "errorMessage": "Bytes(uint64) is equivalent to itob" }, { "pc": [ - 142 + 133 ], "errorMessage": "Bytes(uint64) returns an 8 byte encoding" }, { "pc": [ - 121 + 112 ], "errorMessage": "Empty bytes has length of 0" }, { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 154 + 145 ], "errorMessage": "Round trip of biguint to bytes and back results in the same value" }, { "pc": [ - 85 + 76 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" } @@ -106,8 +106,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDcKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxNQogICAgLy8gY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KDEsIDUwbiwgJ3RoaW5ncycpCiAgICBpbnRjXzEgLy8gMQogICAgcHVzaGJ5dGVzIDB4MzIKICAgIHB1c2hieXRlcyAidGhpbmdzIgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjp0ZXN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3QoYTogdWludDY0LCBiOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjQKICAgIC8vIGZ1bmN0aW9uIHRlc3QoYTogdWludDY0LCBiOiBiaWd1aW50LCBjOiBzdHJpbmcpIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo1CiAgICAvLyBhc3NlcnQoQnl0ZXMoKS5sZW5ndGggPT09IDAsICdFbXB0eSBieXRlcyBoYXMgbGVuZ3RoIG9mIDAnKQogICAgcHVzaGJ5dGVzIDB4CiAgICBsZW4KICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIEVtcHR5IGJ5dGVzIGhhcyBsZW5ndGggb2YgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo2CiAgICAvLyBhc3NlcnQoQnl0ZXMoYSkgPT09IG9wLml0b2IoYSksICdCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYicpCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoQnl0ZXMoVWludDY0KDEpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDAwMDAwMDAwMDAwMDAwMScpLCAnQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZycpCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBkdXAKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo4CiAgICAvLyBhc3NlcnQoQnl0ZXMoQmlnVWludCgyNTYpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMCcpKQogICAgcHVzaGJ5dGVzIDB4MDEwMAogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydChCaWdVaW50KEJ5dGVzKGIpKSA9PT0gYiwgJ1JvdW5kIHRyaXAgb2YgYmlndWludCB0byBieXRlcyBhbmQgYmFjayByZXN1bHRzIGluIHRoZSBzYW1lIHZhbHVlJykKICAgIGZyYW1lX2RpZyAtMgogICAgZHVwCiAgICBiPT0KICAgIGFzc2VydCAvLyBSb3VuZCB0cmlwIG9mIGJpZ3VpbnQgdG8gYnl0ZXMgYW5kIGJhY2sgcmVzdWx0cyBpbiB0aGUgc2FtZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KFN0cmluZyhCeXRlcyhjKSkgPT09IGMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGR1cAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KEJ5dGVzKEJ5dGVzKCcxMjMnKSkgPT09IEJ5dGVzKCcxMjMnKSkKICAgIHB1c2hieXRlcyAiMTIzIgogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjEyCiAgICAvLyBhc3NlcnQoQnl0ZXMoWzEsIDIsIDMsIDRdKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMjAzMDQnKSkKICAgIHB1c2hieXRlcyAweDAxMDIwMzA0CiAgICBkdXAKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhmNTllM2NjNCAvLyBtZXRob2QgInRlc3QoKWJvb2wiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTUKICAgIC8vIGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExOgogICAgcmV0dXJuCgptYWluX3Rlc3Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgptYWluX3N3aXRjaF9jYXNlX25leHRAOToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEwCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxNQogICAgLy8gY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6MTYKICAgIC8vIHB1YmxpYyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE3CiAgICAvLyB0ZXN0KDEsIDUwbiwgJ3RoaW5ncycpCiAgICBpbnRjXzEgLy8gMQogICAgcHVzaGJ5dGVzIDB4MzIKICAgIHB1c2hieXRlcyAidGhpbmdzIgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjp0ZXN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3QoYTogdWludDY0LCBiOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjQKICAgIC8vIGZ1bmN0aW9uIHRlc3QoYTogdWludDY0LCBiOiBiaWd1aW50LCBjOiBzdHJpbmcpIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo1CiAgICAvLyBhc3NlcnQoQnl0ZXMoKS5sZW5ndGggPT09IDAsICdFbXB0eSBieXRlcyBoYXMgbGVuZ3RoIG9mIDAnKQogICAgcHVzaGJ5dGVzIDB4CiAgICBsZW4KICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIEVtcHR5IGJ5dGVzIGhhcyBsZW5ndGggb2YgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo2CiAgICAvLyBhc3NlcnQoQnl0ZXMoYSkgPT09IG9wLml0b2IoYSksICdCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYicpCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyh1aW50NjQpIGlzIGVxdWl2YWxlbnQgdG8gaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoQnl0ZXMoVWludDY0KDEpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDAwMDAwMDAwMDAwMDAwMScpLCAnQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZycpCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBkdXAKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXModWludDY0KSByZXR1cm5zIGFuIDggYnl0ZSBlbmNvZGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czo4CiAgICAvLyBhc3NlcnQoQnl0ZXMoQmlnVWludCgyNTYpKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMCcpKQogICAgcHVzaGJ5dGVzIDB4MDEwMAogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydChCaWdVaW50KEJ5dGVzKGIpKSA9PT0gYiwgJ1JvdW5kIHRyaXAgb2YgYmlndWludCB0byBieXRlcyBhbmQgYmFjayByZXN1bHRzIGluIHRoZSBzYW1lIHZhbHVlJykKICAgIGZyYW1lX2RpZyAtMgogICAgZHVwCiAgICBiPT0KICAgIGFzc2VydCAvLyBSb3VuZCB0cmlwIG9mIGJpZ3VpbnQgdG8gYnl0ZXMgYW5kIGJhY2sgcmVzdWx0cyBpbiB0aGUgc2FtZSB2YWx1ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KFN0cmluZyhCeXRlcyhjKSkgPT09IGMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGR1cAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2J5dGUtZXhwcmVzc2lvbnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KEJ5dGVzKEJ5dGVzKCcxMjMnKSkgPT09IEJ5dGVzKCcxMjMnKSkKICAgIHB1c2hieXRlcyAiMTIzIgogICAgZHVwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjEyCiAgICAvLyBhc3NlcnQoQnl0ZXMoWzEsIDIsIDMsIDRdKSA9PT0gQnl0ZXMuZnJvbUhleCgnMDEwMjAzMDQnKSkKICAgIHB1c2hieXRlcyAweDAxMDIwMzA0CiAgICBkdXAKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9ieXRlLWV4cHJlc3Npb25zLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYnl0ZS1leHByZXNzaW9ucy5hbGdvLnRzOjE1CiAgICAvLyBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQAxNhoAgAT1njzETI4BAAIiQzEZIhJEMRgiE0SIACuAAQAiTwJUgAQVH3x1TFCwI0L/3jEZIkyOAQADQv/SMRgiEkSIAFkjQv/HigABI4ABMoAGdGhpbmdziAACI4mKAwCAABUiEkSL/RaL/RYSRIAIAAAAAAAAAAFJEkSAAgEASRJEi/5JqESL/0kSRIADMTIzSRJEgAQBAgMESRJEiYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/byte-expressions/DemoContract.clear.teal b/tests/approvals/out/byte-expressions/DemoContract.clear.teal index 33119445..a4d58047 100644 --- a/tests/approvals/out/byte-expressions/DemoContract.clear.teal +++ b/tests/approvals/out/byte-expressions/DemoContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/byte-expressions.algo.ts::DemoContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir b/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir new file mode 100644 index 00000000..8f30a709 --- /dev/null +++ b/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir @@ -0,0 +1,79 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__() -> bool: + block@0: // L15 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L15 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()bool" => block@2, * => block@3} + block@2: // test_route_L16 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bool = tests/approvals/byte-expressions.algo.ts::DemoContract.test() + let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) + (log tmp%7#0) + return 1u + block@3: // switch_case_default_L15 + goto block@4 + block@4: // switch_case_next_L15 + goto block@9 + block@5: // bare_routing_L15 + let tmp%8#0: uint64 = (txn OnCompletion) + switch tmp%8#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L15 + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/byte-expressions.algo.ts::DemoContract.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L15 + goto block@8 + block@8: // switch_case_next_L15 + goto block@9 + block@9: // after_if_else_L15 + return 0u + +subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.test() -> bool: + block@0: // L16 + tests/approvals/byte-expressions.algo.ts::test(1u, 50b, "things") + return 1u + +subroutine tests/approvals/byte-expressions.algo.ts::test(a: uint64, b: biguint, c: bytes) -> void: + block@0: // L4 + let tmp%0#0: uint64 = (len 0x) + let tmp%1#0: bool = (== tmp%0#0 0u) + (assert tmp%1#0) // Empty bytes has length of 0 + let tmp%2#0: bytes = (itob a#0) + let tmp%3#0: bytes = (itob a#0) + let tmp%4#0: bool = (== tmp%2#0 tmp%3#0) + (assert tmp%4#0) // Bytes(uint64) is equivalent to itob + let tmp%5#0: bool = (== 0x0000000000000001 0x0000000000000001) + (assert tmp%5#0) // Bytes(uint64) returns an 8 byte encoding + let reinterpret_bytes%0#0: bytes = 256b + let tmp%6#0: bool = (== reinterpret_bytes%0#0 0x0100) + (assert tmp%6#0) + let reinterpret_bytes%1#0: bytes = b#0 + let reinterpret_biguint%0#0: biguint = reinterpret_bytes%1#0 + let tmp%7#0: bool = (b== reinterpret_biguint%0#0 b#0) + (assert tmp%7#0) // Round trip of biguint to bytes and back results in the same value + let tmp%8#0: bool = (== c#0 c#0) + (assert tmp%8#0) + let tmp%9#0: bool = (== "123" "123") + (assert tmp%9#0) + let tmp%10#0: bool = (== 0x01020304 0x01020304) + (assert tmp%10#0) + return + +subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.__algots__.defaultCreate() -> void: + block@0: // L15 + return \ No newline at end of file diff --git a/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir b/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/byte-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/byte-expressions/DemoContract.ssa.ir b/tests/approvals/out/byte-expressions/DemoContract.ssa.ir deleted file mode 100644 index 596c45bb..00000000 --- a/tests/approvals/out/byte-expressions/DemoContract.ssa.ir +++ /dev/null @@ -1,86 +0,0 @@ -contract tests/approvals/byte-expressions.algo.ts::DemoContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.__puya_arc4_router__() -> bool: - block@0: // L15 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L15 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "test()bool" => block@2, * => block@3} - block@2: // test_route_L16 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bool = tests/approvals/byte-expressions.algo.ts::DemoContract.test() - let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) - (log tmp%7#0) - return 1u - block@3: // switch_case_default_L15 - goto block@4 - block@4: // switch_case_next_L15 - goto block@9 - block@5: // bare_routing_L15 - let tmp%8#0: uint64 = (txn OnCompletion) - switch tmp%8#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L15 - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/byte-expressions.algo.ts::DemoContract.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L15 - goto block@8 - block@8: // switch_case_next_L15 - goto block@9 - block@9: // after_if_else_L15 - return 0u - - subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.test() -> bool: - block@0: // L16 - tests/approvals/byte-expressions.algo.ts::test(1u, 50b, "things") - return 1u - - subroutine tests/approvals/byte-expressions.algo.ts::test(a: uint64, b: biguint, c: bytes) -> void: - block@0: // L4 - let tmp%0#0: uint64 = (len 0x) - let tmp%1#0: bool = (== tmp%0#0 0u) - (assert tmp%1#0) // Empty bytes has length of 0 - let tmp%2#0: bytes = (itob a#0) - let tmp%3#0: bytes = (itob a#0) - let tmp%4#0: bool = (== tmp%2#0 tmp%3#0) - (assert tmp%4#0) // Bytes(uint64) is equivalent to itob - let tmp%5#0: bool = (== 0x0000000000000001 0x0000000000000001) - (assert tmp%5#0) // Bytes(uint64) returns an 8 byte encoding - let reinterpret_bytes%0#0: bytes = 256b - let tmp%6#0: bool = (== reinterpret_bytes%0#0 0x0100) - (assert tmp%6#0) - let reinterpret_bytes%1#0: bytes = b#0 - let reinterpret_biguint%0#0: biguint = reinterpret_bytes%1#0 - let tmp%7#0: bool = (b== reinterpret_biguint%0#0 b#0) - (assert tmp%7#0) // Round trip of biguint to bytes and back results in the same value - let tmp%8#0: bool = (== c#0 c#0) - (assert tmp%8#0) - let tmp%9#0: bool = (== "123" "123") - (assert tmp%9#0) - let tmp%10#0: bool = (== 0x01020304 0x01020304) - (assert tmp%10#0) - return - - subroutine tests/approvals/byte-expressions.algo.ts::DemoContract.__algots__.defaultCreate() -> void: - block@0: // L15 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/call-expressions/Example.approval.teal b/tests/approvals/out/call-expressions/Example.approval.teal index 815f30fe..b5a0ce7e 100644 --- a/tests/approvals/out/call-expressions/Example.approval.teal +++ b/tests/approvals/out/call-expressions/Example.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/call-expressions.algo.ts::Example.approvalProgram: +// tests/approvals/call-expressions.algo.ts::Example.approvalProgram() -> uint64: +main: // tests/approvals/call-expressions.algo.ts:12 // return this.localMethod() + super.baseMethod() === freeMethod() - this.baseMethod() callsub localMethod diff --git a/tests/approvals/out/call-expressions/Example.clear.teal b/tests/approvals/out/call-expressions/Example.clear.teal index bf95f000..a4d58047 100644 --- a/tests/approvals/out/call-expressions/Example.clear.teal +++ b/tests/approvals/out/call-expressions/Example.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/call-expressions.algo.ts::Example.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/call-expressions/Example.ir/Example.approval.0.ssa.ir b/tests/approvals/out/call-expressions/Example.ir/Example.approval.0.ssa.ir new file mode 100644 index 00000000..cb0e2c2f --- /dev/null +++ b/tests/approvals/out/call-expressions/Example.ir/Example.approval.0.ssa.ir @@ -0,0 +1,26 @@ +main tests/approvals/call-expressions.algo.ts::Example.approvalProgram: + block@0: // L11 + let tmp%0#0: uint64 = tests/approvals/call-expressions.algo.ts::Example.localMethod() + let tmp%1#0: uint64 = tests/approvals/call-expressions.algo.ts::ExampleBase.baseMethod() + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: uint64 = tests/approvals/call-expressions.algo.ts::freeMethod() + let tmp%4#0: uint64 = tests/approvals/call-expressions.algo.ts::Example.baseMethod() + let tmp%5#0: uint64 = (- tmp%3#0 tmp%4#0) + let tmp%6#0: bool = (== tmp%2#0 tmp%5#0) + return tmp%6#0 + +subroutine tests/approvals/call-expressions.algo.ts::Example.localMethod() -> uint64: + block@0: // L17 + return 5u + +subroutine tests/approvals/call-expressions.algo.ts::ExampleBase.baseMethod() -> uint64: + block@0: // L5 + return 2u + +subroutine tests/approvals/call-expressions.algo.ts::freeMethod() -> uint64: + block@0: // L22 + return 7u + +subroutine tests/approvals/call-expressions.algo.ts::Example.baseMethod() -> uint64: + block@0: // L14 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/call-expressions/Example.ir/Example.clear.0.ssa.ir b/tests/approvals/out/call-expressions/Example.ir/Example.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/call-expressions/Example.ir/Example.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/call-expressions/Example.ssa.ir b/tests/approvals/out/call-expressions/Example.ssa.ir deleted file mode 100644 index 1753d673..00000000 --- a/tests/approvals/out/call-expressions/Example.ssa.ir +++ /dev/null @@ -1,33 +0,0 @@ -contract tests/approvals/call-expressions.algo.ts::Example: - program approval: - subroutine tests/approvals/call-expressions.algo.ts::Example.approvalProgram() -> bool: - block@0: // L11 - let tmp%0#0: uint64 = tests/approvals/call-expressions.algo.ts::Example.localMethod() - let tmp%1#0: uint64 = tests/approvals/call-expressions.algo.ts::ExampleBase.baseMethod() - let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) - let tmp%3#0: uint64 = tests/approvals/call-expressions.algo.ts::freeMethod() - let tmp%4#0: uint64 = tests/approvals/call-expressions.algo.ts::Example.baseMethod() - let tmp%5#0: uint64 = (- tmp%3#0 tmp%4#0) - let tmp%6#0: bool = (== tmp%2#0 tmp%5#0) - return tmp%6#0 - - subroutine tests/approvals/call-expressions.algo.ts::Example.localMethod() -> uint64: - block@0: // L17 - return 5u - - subroutine tests/approvals/call-expressions.algo.ts::ExampleBase.baseMethod() -> uint64: - block@0: // L5 - return 2u - - subroutine tests/approvals/call-expressions.algo.ts::freeMethod() -> uint64: - block@0: // L22 - return 7u - - subroutine tests/approvals/call-expressions.algo.ts::Example.baseMethod() -> uint64: - block@0: // L14 - return 1u - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/casting/CastingAlgo.approval.teal b/tests/approvals/out/casting/CastingAlgo.approval.teal index d03c6a06..c42674fc 100644 --- a/tests/approvals/out/casting/CastingAlgo.approval.teal +++ b/tests/approvals/out/casting/CastingAlgo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/casting.algo.ts::CastingAlgo.approvalProgram: +// tests/approvals/casting.algo.ts::CastingAlgo.approvalProgram() -> uint64: +main: intcblock 1 2 3 // tests/approvals/casting.algo.ts:8 // const y = [1, 2, 3] as [uint64, uint64, uint64] diff --git a/tests/approvals/out/casting/CastingAlgo.clear.teal b/tests/approvals/out/casting/CastingAlgo.clear.teal index e703b9c3..a4d58047 100644 --- a/tests/approvals/out/casting/CastingAlgo.clear.teal +++ b/tests/approvals/out/casting/CastingAlgo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/casting.algo.ts::CastingAlgo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.approval.0.ssa.ir b/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.approval.0.ssa.ir new file mode 100644 index 00000000..d73aeb94 --- /dev/null +++ b/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.approval.0.ssa.ir @@ -0,0 +1,12 @@ +main tests/approvals/casting.algo.ts::CastingAlgo.approvalProgram: + block@0: // L5 + let x#0: uint64 = 123u + let (y.0#0: uint64, y.1#0: uint64, y.2#0: uint64) = (1u, 2u, 3u) + let (z.0#0: uint64, z.1#0: uint64, z.2#0: uint64) = (1u, 2u, 3u) + let tmp%0#0: uint64 = (* y.0#0 y.1#0) + let tmp%1#0: uint64 = (* tmp%0#0 y.2#0) + let tmp%2#0: uint64 = (* tmp%1#0 z.0#0) + let tmp%3#0: uint64 = (* tmp%2#0 z.1#0) + let tmp%4#0: uint64 = (* tmp%3#0 z.2#0) + let tmp%5#0: bool = (> x#0 tmp%4#0) + return tmp%5#0 \ No newline at end of file diff --git a/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.clear.0.ssa.ir b/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/casting/CastingAlgo.ir/CastingAlgo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/casting/CastingAlgo.ssa.ir b/tests/approvals/out/casting/CastingAlgo.ssa.ir deleted file mode 100644 index 81410f84..00000000 --- a/tests/approvals/out/casting/CastingAlgo.ssa.ir +++ /dev/null @@ -1,19 +0,0 @@ -contract tests/approvals/casting.algo.ts::CastingAlgo: - program approval: - subroutine tests/approvals/casting.algo.ts::CastingAlgo.approvalProgram() -> bool: - block@0: // L5 - let x#0: uint64 = 123u - let (y.0#0: uint64, y.1#0: uint64, y.2#0: uint64) = (1u, 2u, 3u) - let (z.0#0: uint64, z.1#0: uint64, z.2#0: uint64) = (1u, 2u, 3u) - let tmp%0#0: uint64 = (* y.0#0 y.1#0) - let tmp%1#0: uint64 = (* tmp%0#0 y.2#0) - let tmp%2#0: uint64 = (* tmp%1#0 z.0#0) - let tmp%3#0: uint64 = (* tmp%2#0 z.1#0) - let tmp%4#0: uint64 = (* tmp%3#0 z.2#0) - let tmp%5#0: bool = (> x#0 tmp%4#0) - return tmp%5#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/ensure-budget/EnsureBudgetContract.approval.teal b/tests/approvals/out/ensure-budget/EnsureBudgetContract.approval.teal index a44f4375..d5ae7392 100644 --- a/tests/approvals/out/ensure-budget/EnsureBudgetContract.approval.teal +++ b/tests/approvals/out/ensure-budget/EnsureBudgetContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract.approvalProgram: +// tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract.approvalProgram() -> uint64: +main: intcblock 100 0 1 bytecblock 0x068101 // tests/approvals/ensure-budget.algo.ts:5 @@ -41,6 +43,8 @@ ensure_budget_while_top@1: frame_dig 0 < bz ensure_budget_after_while@7 + +ensure_budget_while_body@2: itxn_begin pushint 6 // appl itxn_field TypeEnum @@ -54,23 +58,22 @@ ensure_budget_while_top@1: intc_2 // 1 frame_dig -1 match ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4 - b ensure_budget_switch_case_default@5 -ensure_budget_switch_case_0@3: - intc_1 // 0 - itxn_field Fee - b ensure_budget_switch_case_next@6 +ensure_budget_switch_case_default@5: + +ensure_budget_switch_case_next@6: + itxn_submit + b ensure_budget_while_top@1 ensure_budget_switch_case_1@4: global MinTxnFee itxn_field Fee b ensure_budget_switch_case_next@6 -ensure_budget_switch_case_default@5: - -ensure_budget_switch_case_next@6: - itxn_submit - b ensure_budget_while_top@1 +ensure_budget_switch_case_0@3: + intc_1 // 0 + itxn_field Fee + b ensure_budget_switch_case_next@6 ensure_budget_after_while@7: retsub diff --git a/tests/approvals/out/ensure-budget/EnsureBudgetContract.clear.teal b/tests/approvals/out/ensure-budget/EnsureBudgetContract.clear.teal index c0d63ccf..a4d58047 100644 --- a/tests/approvals/out/ensure-budget/EnsureBudgetContract.clear.teal +++ b/tests/approvals/out/ensure-budget/EnsureBudgetContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.approval.0.ssa.ir b/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.approval.0.ssa.ir new file mode 100644 index 00000000..84d585de --- /dev/null +++ b/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.approval.0.ssa.ir @@ -0,0 +1,37 @@ +main tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract.approvalProgram: + block@0: // L4 + _puya_lib.util.ensure_budget(100u, 0u) + _puya_lib.util.ensure_budget(100u, 0u) + _puya_lib.util.ensure_budget(100u, 1u) + _puya_lib.util.ensure_budget(100u, 2u) + return 1u + +subroutine _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void: + block@0: // L12 + let required_budget_with_buffer#0: uint64 = (+ required_budget#0 10u) + goto block@1 + block@1: // while_top_L20 + let tmp%0#0: uint64 = (global OpcodeBudget) + let tmp%1#0: bool = (> required_budget_with_buffer#0 tmp%0#0) + goto tmp%1#0 ? block@2 : block@7 + block@2: // while_body_L21 + itxn_begin + ((itxn_field TypeEnum) appl) + ((itxn_field OnCompletion) DeleteApplication) + ((itxn_field ApprovalProgram) 0x068101) + ((itxn_field ClearStateProgram) 0x068101) + switch fee_source#0 {0u => block@3, 1u => block@4, * => block@5} + block@3: // switch_case_0_L28 + ((itxn_field Fee) 0u) + goto block@6 + block@4: // switch_case_1_L30 + let tmp%2#0: uint64 = (global MinTxnFee) + ((itxn_field Fee) tmp%2#0) + goto block@6 + block@5: // switch_case_default_L26 + goto block@6 + block@6: // switch_case_next_L26 + itxn_submit + goto block@1 + block@7: // after_while_L20 + return \ No newline at end of file diff --git a/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.clear.0.ssa.ir b/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/ensure-budget/EnsureBudgetContract.ir/EnsureBudgetContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/ensure-budget/EnsureBudgetContract.ssa.ir b/tests/approvals/out/ensure-budget/EnsureBudgetContract.ssa.ir deleted file mode 100644 index 0365ea8a..00000000 --- a/tests/approvals/out/ensure-budget/EnsureBudgetContract.ssa.ir +++ /dev/null @@ -1,44 +0,0 @@ -contract tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract: - program approval: - subroutine tests/approvals/ensure-budget.algo.ts::EnsureBudgetContract.approvalProgram() -> bool: - block@0: // L4 - _puya_lib.util.ensure_budget(100u, 0u) - _puya_lib.util.ensure_budget(100u, 0u) - _puya_lib.util.ensure_budget(100u, 1u) - _puya_lib.util.ensure_budget(100u, 2u) - return 1u - - subroutine _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void: - block@0: // L12 - let required_budget_with_buffer#0: uint64 = (+ required_budget#0 10u) - goto block@1 - block@1: // while_top_L20 - let tmp%0#0: uint64 = (global OpcodeBudget) - let tmp%1#0: bool = (> required_budget_with_buffer#0 tmp%0#0) - goto tmp%1#0 ? block@2 : block@7 - block@2: // while_body_L21 - itxn_begin - ((itxn_field TypeEnum) appl) - ((itxn_field OnCompletion) DeleteApplication) - ((itxn_field ApprovalProgram) 0x068101) - ((itxn_field ClearStateProgram) 0x068101) - switch fee_source#0 {0u => block@3, 1u => block@4, * => block@5} - block@3: // switch_case_0_L28 - ((itxn_field Fee) 0u) - goto block@6 - block@4: // switch_case_1_L30 - let tmp%2#0: uint64 = (global MinTxnFee) - ((itxn_field Fee) tmp%2#0) - goto block@6 - block@5: // switch_case_default_L26 - goto block@6 - block@6: // switch_case_next_L26 - itxn_submit - goto block@1 - block@7: // after_while_L20 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/global-state/TestContract.approval.teal b/tests/approvals/out/global-state/TestContract.approval.teal index f89846b9..1b0f9f48 100644 --- a/tests/approvals/out/global-state/TestContract.approval.teal +++ b/tests/approvals/out/global-state/TestContract.approval.teal @@ -1,10 +1,14 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/global-state.algo.ts::TestContract.approvalProgram: +// tests/approvals/global-state.algo.ts::TestContract.approvalProgram() -> uint64: +main: intcblock 0 2 bytecblock "testState" "baseTestState" "testing 123" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: diff --git a/tests/approvals/out/global-state/TestContract.clear.teal b/tests/approvals/out/global-state/TestContract.clear.teal index 599e8bcc..a4d58047 100644 --- a/tests/approvals/out/global-state/TestContract.clear.teal +++ b/tests/approvals/out/global-state/TestContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/global-state.algo.ts::TestContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/global-state/TestContract.ir/TestContract.approval.0.ssa.ir b/tests/approvals/out/global-state/TestContract.ir/TestContract.approval.0.ssa.ir new file mode 100644 index 00000000..a1594080 --- /dev/null +++ b/tests/approvals/out/global-state/TestContract.ir/TestContract.approval.0.ssa.ir @@ -0,0 +1,39 @@ +main tests/approvals/global-state.algo.ts::TestContract.approvalProgram: + block@0: // L21 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/global-state.algo.ts::TestContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "testState") + (assert maybe_exists%0#0) // State should have value + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "testState") + (assert maybe_exists%1#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%1#0 2u) + (assert tmp%0#0) // Value should equal 2 + let tmp%1#0: bytes = ((txnas ApplicationArgs) 0u) + let new_state_value%0#0: uint64 = (btoi tmp%1#0) + (app_global_put "testState" new_state_value%0#0) + return 1u + +subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> void: + block@0: // L14 + let someValue#0: uint64 = 72057594037927936u + tests/approvals/global-state.algo.ts::BaseTestContract.constructor() + (app_global_put "testState" 2u) + (app_global_put "TESTSTATE" 5u) + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "baseTestState") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%0#0 "testing 123") + (assert tmp%0#0) // Base class state should be initialized after super call + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "testState") + (assert maybe_exists%1#0) // check GlobalState exists + let new_state_value%0#0: uint64 = (* someValue#0 maybe_value%1#0) + (app_global_put "noInitialInt" new_state_value%0#0) + return + +subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: + block@0: // L4 + (app_global_put "baseTestState" "testing 123") + return \ No newline at end of file diff --git a/tests/approvals/out/global-state/TestContract.ir/TestContract.clear.0.ssa.ir b/tests/approvals/out/global-state/TestContract.ir/TestContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/global-state/TestContract.ir/TestContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/global-state/TestContract.ssa.ir b/tests/approvals/out/global-state/TestContract.ssa.ir deleted file mode 100644 index b33a0eb9..00000000 --- a/tests/approvals/out/global-state/TestContract.ssa.ir +++ /dev/null @@ -1,46 +0,0 @@ -contract tests/approvals/global-state.algo.ts::TestContract: - program approval: - subroutine tests/approvals/global-state.algo.ts::TestContract.approvalProgram() -> bool: - block@0: // L21 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/global-state.algo.ts::TestContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "testState") - (assert maybe_exists%0#0) // State should have value - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "testState") - (assert maybe_exists%1#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%1#0 2u) - (assert tmp%0#0) // Value should equal 2 - let tmp%1#0: bytes = ((txnas ApplicationArgs) 0u) - let new_state_value%0#0: uint64 = (btoi tmp%1#0) - (app_global_put "testState" new_state_value%0#0) - return 1u - - subroutine tests/approvals/global-state.algo.ts::TestContract.constructor() -> void: - block@0: // L14 - let someValue#0: uint64 = 72057594037927936u - tests/approvals/global-state.algo.ts::BaseTestContract.constructor() - (app_global_put "testState" 2u) - (app_global_put "TESTSTATE" 5u) - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "baseTestState") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%0#0 "testing 123") - (assert tmp%0#0) // Base class state should be initialized after super call - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "testState") - (assert maybe_exists%1#0) // check GlobalState exists - let new_state_value%0#0: uint64 = (* someValue#0 maybe_value%1#0) - (app_global_put "noInitialInt" new_state_value%0#0) - return - - subroutine tests/approvals/global-state.algo.ts::BaseTestContract.constructor() -> void: - block@0: // L4 - (app_global_put "baseTestState" "testing 123") - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.approval.teal b/tests/approvals/out/implicit-create/BaseWithAbiCreate.approval.teal index a6fa144e..e8628364 100644 --- a/tests/approvals/out/implicit-create/BaseWithAbiCreate.approval.teal +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:17 // class BaseWithAbiCreate extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/implicit-create.algo.ts:17 + // class BaseWithAbiCreate extends Contract { txna ApplicationArgs 0 pushbytes 0x4c5c61ba // method "create()void" swap - match __puya_arc4_router___create_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_create_route@3 + +main_switch_case_default@4: + +main_switch_case_next@5: + +main_after_if_else@7: + // tests/approvals/implicit-create.algo.ts:17 + // class BaseWithAbiCreate extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__@8: + return -__puya_arc4_router___create_route@2: +main_create_route@3: // tests/approvals/implicit-create.algo.ts:18 // @abimethod({ onCreate: 'require' }) txn OnCompletion @@ -34,18 +46,10 @@ __puya_arc4_router___create_route@2: assert // can only call when creating callsub create pushint 1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@6 + b main_after_inlined_tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__@8 -__puya_arc4_router___bare_routing@5: - -__puya_arc4_router___after_if_else@6: - // tests/approvals/implicit-create.algo.ts:17 - // class BaseWithAbiCreate extends Contract { - intc_0 // 0 - retsub +main_bare_routing@6: + b main_after_if_else@7 // tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc32.json b/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc32.json index 0d514a73..9c48aea5 100644 --- a/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc32.json +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTcKICAgIC8vIGNsYXNzIEJhc2VXaXRoQWJpQ3JlYXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE3CiAgICAvLyBjbGFzcyBCYXNlV2l0aEFiaUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AODoKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDgKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEFiaUNyZWF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc56.json b/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc56.json index 484459e4..a3c9d475 100644 --- a/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc56.json +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.arc56.json @@ -55,13 +55,13 @@ "sourceInfo": [ { "pc": [ - 39 + 31 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 44 + 36 ], "errorMessage": "can only call when creating" } @@ -74,8 +74,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTcKICAgIC8vIGNsYXNzIEJhc2VXaXRoQWJpQ3JlYXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE3CiAgICAvLyBjbGFzcyBCYXNlV2l0aEFiaUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNwogICAgLy8gY2xhc3MgQmFzZVdpdGhBYmlDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AODoKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQWJpQ3JlYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDgKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEFiaUNyZWF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiABADEbIhNBACI2GgCABExcYbpMjgEAAiJDMRkiEkQxGCISRIgACIEBQv/tQv/pigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.clear.teal b/tests/approvals/out/implicit-create/BaseWithAbiCreate.clear.teal index b0909d5d..a4d58047 100644 --- a/tests/approvals/out/implicit-create/BaseWithAbiCreate.clear.teal +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.approval.0.ssa.ir b/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.approval.0.ssa.ir new file mode 100644 index 00000000..2a6e30e0 --- /dev/null +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.approval.0.ssa.ir @@ -0,0 +1,34 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__() -> bool: + block@0: // L17 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L17 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "create()void" => block@2, * => block@3} + block@2: // create_route_L18 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() + return 1u + block@3: // switch_case_default_L17 + goto block@4 + block@4: // switch_case_next_L17 + goto block@6 + block@5: // bare_routing_L17 + goto block@6 + block@6: // after_if_else_L17 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: + block@0: // L18 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.clear.0.ssa.ir b/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/BaseWithAbiCreate.ir/BaseWithAbiCreate.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithAbiCreate.ssa.ir b/tests/approvals/out/implicit-create/BaseWithAbiCreate.ssa.ir deleted file mode 100644 index ce6fdd1d..00000000 --- a/tests/approvals/out/implicit-create/BaseWithAbiCreate.ssa.ir +++ /dev/null @@ -1,41 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.__puya_arc4_router__() -> bool: - block@0: // L17 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L17 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "create()void" => block@2, * => block@3} - block@2: // create_route_L18 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() - return 1u - block@3: // switch_case_default_L17 - goto block@4 - block@4: // switch_case_next_L17 - goto block@6 - block@5: // bare_routing_L17 - goto block@6 - block@6: // after_if_else_L17 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: - block@0: // L18 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.approval.teal b/tests/approvals/out/implicit-create/BaseWithBareCreate.approval.teal index 449c78ee..2502db71 100644 --- a/tests/approvals/out/implicit-create/BaseWithBareCreate.approval.teal +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.approval.teal @@ -1,32 +1,42 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:13 // class BaseWithBareCreate extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@2 - b __puya_arc4_router___after_if_else@6 + bz main_bare_routing@3 + +main_abi_routing@2: + +main_after_if_else@7: + // tests/approvals/implicit-create.algo.ts:13 + // class BaseWithBareCreate extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__@8: + return -__puya_arc4_router___bare_routing@2: +main_bare_routing@3: // tests/approvals/implicit-create.algo.ts:13 // class BaseWithBareCreate extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router___create@3 - b __puya_arc4_router___switch_case_default@4 + match main_create@4 -__puya_arc4_router___create@3: +main_switch_case_default@5: + +main_switch_case_next@6: + b main_after_if_else@7 + +main_create@4: // tests/approvals/implicit-create.algo.ts:14 // @baremethod({ onCreate: 'require' }) txn ApplicationID @@ -38,15 +48,7 @@ __puya_arc4_router___create@3: // public create() {} callsub create pushint 1 // 1 - retsub - -__puya_arc4_router___switch_case_default@4: - -__puya_arc4_router___after_if_else@6: - // tests/approvals/implicit-create.algo.ts:13 - // class BaseWithBareCreate extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__@8 // tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.arc32.json b/tests/approvals/out/implicit-create/BaseWithBareCreate.arc32.json index 9ec2ec1e..762cba88 100644 --- a/tests/approvals/out/implicit-create/BaseWithBareCreate.arc32.json +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.arc32.json @@ -1,8 +1,8 @@ { "hints": {}, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMAogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEJhc2VXaXRoQmFyZUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNC0xNQogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIGNhbGxzdWIgY3JlYXRlCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEJhc2VXaXRoQmFyZUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQtMTUKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AzCgptYWluX2FiaV9yb3V0aW5nQDI6CgptYWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxMwogICAgLy8gY2xhc3MgQmFzZVdpdGhCYXJlQ3JlYXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9jcmVhdGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDcKCm1haW5fY3JlYXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.arc56.json b/tests/approvals/out/implicit-create/BaseWithBareCreate.arc56.json index 11d874b1..9cbb64fe 100644 --- a/tests/approvals/out/implicit-create/BaseWithBareCreate.arc56.json +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.arc56.json @@ -40,7 +40,7 @@ "sourceInfo": [ { "pc": [ - 36 + 28 ], "errorMessage": "can only call when creating" } @@ -53,8 +53,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMAogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEJhc2VXaXRoQmFyZUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNC0xNQogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIGNhbGxzdWIgY3JlYXRlCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTMKICAgIC8vIGNsYXNzIEJhc2VXaXRoQmFyZUNyZWF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQtMTUKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AzCgptYWluX2FiaV9yb3V0aW5nQDI6CgptYWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxMwogICAgLy8gY2xhc3MgQmFzZVdpdGhCYXJlQ3JlYXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjEzCiAgICAvLyBjbGFzcyBCYXNlV2l0aEJhcmVDcmVhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9jcmVhdGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDcKCm1haW5fY3JlYXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkJhc2VXaXRoQmFyZUNyZWF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiABADEbIhNBAAIiQzEZIkyOAQADQv/zMRgiEkSIAAWBAUL/54oAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.clear.teal b/tests/approvals/out/implicit-create/BaseWithBareCreate.clear.teal index fcd5348e..a4d58047 100644 --- a/tests/approvals/out/implicit-create/BaseWithBareCreate.clear.teal +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.approval.0.ssa.ir b/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.approval.0.ssa.ir new file mode 100644 index 00000000..c993f3b8 --- /dev/null +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.approval.0.ssa.ir @@ -0,0 +1,31 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__() -> bool: + block@0: // L13 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@2 + block@1: // abi_routing_L13 + goto block@6 + block@2: // bare_routing_L13 + let tmp%2#0: uint64 = (txn OnCompletion) + switch tmp%2#0 {0u => block@3, * => block@4} + block@3: // create_L14 + let tmp%3#0: uint64 = (txn ApplicationID) + let tmp%4#0: bool = (== tmp%3#0 0u) + (assert tmp%4#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() + return 1u + block@4: // switch_case_default_L13 + goto block@5 + block@5: // switch_case_next_L13 + goto block@6 + block@6: // after_if_else_L13 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: + block@0: // L14 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.clear.0.ssa.ir b/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/BaseWithBareCreate.ir/BaseWithBareCreate.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/BaseWithBareCreate.ssa.ir b/tests/approvals/out/implicit-create/BaseWithBareCreate.ssa.ir deleted file mode 100644 index b4afe5e9..00000000 --- a/tests/approvals/out/implicit-create/BaseWithBareCreate.ssa.ir +++ /dev/null @@ -1,38 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::BaseWithBareCreate: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.__puya_arc4_router__() -> bool: - block@0: // L13 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@2 - block@1: // abi_routing_L13 - goto block@6 - block@2: // bare_routing_L13 - let tmp%2#0: uint64 = (txn OnCompletion) - switch tmp%2#0 {0u => block@3, * => block@4} - block@3: // create_L14 - let tmp%3#0: uint64 = (txn ApplicationID) - let tmp%4#0: bool = (== tmp%3#0 0u) - (assert tmp%4#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() - return 1u - block@4: // switch_case_default_L13 - goto block@5 - block@5: // switch_case_next_L13 - goto block@6 - block@6: // after_if_else_L13 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: - block@0: // L14 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.approval.teal b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.approval.teal index 33349514..386b9638 100644 --- a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.approval.teal +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:23 // export class ExplicitAbiCreateFromBase extends BaseWithAbiCreate {} - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/implicit-create.algo.ts:23 + // export class ExplicitAbiCreateFromBase extends BaseWithAbiCreate {} txna ApplicationArgs 0 pushbytes 0x4c5c61ba // method "create()void" swap - match __puya_arc4_router___create_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_create_route@3 + +main_switch_case_default@4: + +main_switch_case_next@5: + +main_after_if_else@7: + // tests/approvals/implicit-create.algo.ts:23 + // export class ExplicitAbiCreateFromBase extends BaseWithAbiCreate {} + intc_0 // 0 + +main_after_inlined_tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__@8: + return -__puya_arc4_router___create_route@2: +main_create_route@3: // tests/approvals/implicit-create.algo.ts:18 // @abimethod({ onCreate: 'require' }) txn OnCompletion @@ -34,18 +46,10 @@ __puya_arc4_router___create_route@2: assert // can only call when creating callsub create pushint 1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@6 + b main_after_inlined_tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__@8 -__puya_arc4_router___bare_routing@5: - -__puya_arc4_router___after_if_else@6: - // tests/approvals/implicit-create.algo.ts:23 - // export class ExplicitAbiCreateFromBase extends BaseWithAbiCreate {} - intc_0 // 0 - retsub +main_bare_routing@6: + b main_after_if_else@7 // tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc32.json b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc32.json index 09db4b26..bcb6b042 100644 --- a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc32.json +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjMKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEFiaUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhBYmlDcmVhdGUge30KICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMwogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEFiaUNyZWF0ZSB7fQogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQWJpQ3JlYXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjMKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEFiaUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhBYmlDcmVhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9jcmVhdGVfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQWJpQ3JlYXRlIHt9CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4CgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VANwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc56.json b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc56.json index ed0824ff..af1020cc 100644 --- a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc56.json +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.arc56.json @@ -55,13 +55,13 @@ "sourceInfo": [ { "pc": [ - 39 + 31 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 44 + 36 ], "errorMessage": "can only call when creating" } @@ -74,8 +74,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjMKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEFiaUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhBYmlDcmVhdGUge30KICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMwogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEFiaUNyZWF0ZSB7fQogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QWJpQ3JlYXRlRnJvbUJhc2UuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQWJpQ3JlYXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjMKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEFiaUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhBYmlDcmVhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDRjNWM2MWJhIC8vIG1ldGhvZCAiY3JlYXRlKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9jcmVhdGVfcm91dGVAMwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CgptYWluX3N3aXRjaF9jYXNlX25leHRANToKCm1haW5fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQWJpQ3JlYXRlIHt9CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRBYmlDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4CgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VANwoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhBYmlDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE4LTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiABADEbIhNBACI2GgCABExcYbpMjgEAAiJDMRkiEkQxGCISRIgACIEBQv/tQv/pigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.clear.teal b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.clear.teal index 88995789..a4d58047 100644 --- a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.clear.teal +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.approval.0.ssa.ir b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.approval.0.ssa.ir new file mode 100644 index 00000000..d40ec445 --- /dev/null +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.approval.0.ssa.ir @@ -0,0 +1,34 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__() -> bool: + block@0: // L23 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L23 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "create()void" => block@2, * => block@3} + block@2: // create_route_L18 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() + return 1u + block@3: // switch_case_default_L23 + goto block@4 + block@4: // switch_case_next_L23 + goto block@6 + block@5: // bare_routing_L23 + goto block@6 + block@6: // after_if_else_L23 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: + block@0: // L18 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.clear.0.ssa.ir b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ir/ExplicitAbiCreateFromBase.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ssa.ir b/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ssa.ir deleted file mode 100644 index 2e410095..00000000 --- a/tests/approvals/out/implicit-create/ExplicitAbiCreateFromBase.ssa.ir +++ /dev/null @@ -1,41 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::ExplicitAbiCreateFromBase.__puya_arc4_router__() -> bool: - block@0: // L23 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L23 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "create()void" => block@2, * => block@3} - block@2: // create_route_L18 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() - return 1u - block@3: // switch_case_default_L23 - goto block@4 - block@4: // switch_case_next_L23 - goto block@6 - block@5: // bare_routing_L23 - goto block@6 - block@6: // after_if_else_L23 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithAbiCreate.create() -> void: - block@0: // L18 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.approval.teal b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.approval.teal index adb97d7f..493f609a 100644 --- a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.approval.teal +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.approval.teal @@ -1,32 +1,42 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:21 // export class ExplicitBareCreateFromBase extends BaseWithBareCreate {} - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@2 - b __puya_arc4_router___after_if_else@6 + bz main_bare_routing@3 + +main_abi_routing@2: + +main_after_if_else@7: + // tests/approvals/implicit-create.algo.ts:21 + // export class ExplicitBareCreateFromBase extends BaseWithBareCreate {} + intc_0 // 0 + +main_after_inlined_tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__@8: + return -__puya_arc4_router___bare_routing@2: +main_bare_routing@3: // tests/approvals/implicit-create.algo.ts:21 // export class ExplicitBareCreateFromBase extends BaseWithBareCreate {} txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router___create@3 - b __puya_arc4_router___switch_case_default@4 + match main_create@4 -__puya_arc4_router___create@3: +main_switch_case_default@5: + +main_switch_case_next@6: + b main_after_if_else@7 + +main_create@4: // tests/approvals/implicit-create.algo.ts:14 // @baremethod({ onCreate: 'require' }) txn ApplicationID @@ -38,15 +48,7 @@ __puya_arc4_router___create@3: // public create() {} callsub create pushint 1 // 1 - retsub - -__puya_arc4_router___switch_case_default@4: - -__puya_arc4_router___after_if_else@6: - // tests/approvals/implicit-create.algo.ts:21 - // export class ExplicitBareCreateFromBase extends BaseWithBareCreate {} - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__@8 // tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc32.json b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc32.json index 7ba267f3..caabd82f 100644 --- a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc32.json +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc32.json @@ -1,8 +1,8 @@ { "hints": {}, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhCYXJlQ3JlYXRlIHt9CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjEKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEJhcmVDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQmFyZUNyZWF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhCYXJlQ3JlYXRlIHt9CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMKCm1haW5fYWJpX3JvdXRpbmdAMjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpFeHBsaWNpdEJhcmVDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUA0CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VANwoKbWFpbl9jcmVhdGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNAogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQtMTUKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBjYWxsc3ViIGNyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AOAoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhCYXJlQ3JlYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNC0xNQogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc56.json b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc56.json index 14a3bd2f..9be7f08d 100644 --- a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc56.json +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.arc56.json @@ -40,7 +40,7 @@ "sourceInfo": [ { "pc": [ - 36 + 28 ], "errorMessage": "can only call when creating" } @@ -53,8 +53,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhCYXJlQ3JlYXRlIHt9CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MjEKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHBsaWNpdEJhcmVDcmVhdGVGcm9tQmFzZSBleHRlbmRzIEJhc2VXaXRoQmFyZUNyZWF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgY2FsbHN1YiBjcmVhdGUKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoyMQogICAgLy8gZXhwb3J0IGNsYXNzIEV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlIGV4dGVuZHMgQmFzZVdpdGhCYXJlQ3JlYXRlIHt9CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpCYXNlV2l0aEJhcmVDcmVhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjE0LTE1CiAgICAvLyBAYmFyZW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIHB1YmxpYyBjcmVhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OkV4cGxpY2l0QmFyZUNyZWF0ZUZyb21CYXNlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMAoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMKCm1haW5fYWJpX3JvdXRpbmdAMjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpFeHBsaWNpdEJhcmVDcmVhdGVGcm9tQmFzZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A4OgogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjIxCiAgICAvLyBleHBvcnQgY2xhc3MgRXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UgZXh0ZW5kcyBCYXNlV2l0aEJhcmVDcmVhdGUge30KICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUA0CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VANwoKbWFpbl9jcmVhdGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNAogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6MTQtMTUKICAgIC8vIEBiYXJlbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gcHVibGljIGNyZWF0ZSgpIHt9CiAgICBjYWxsc3ViIGNyZWF0ZQogICAgcHVzaGludCAxIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6RXhwbGljaXRCYXJlQ3JlYXRlRnJvbUJhc2UuX19wdXlhX2FyYzRfcm91dGVyX19AOAoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6QmFzZVdpdGhCYXJlQ3JlYXRlLmNyZWF0ZSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czoxNC0xNQogICAgLy8gQGJhcmVtZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBwdWJsaWMgY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiABADEbIhNBAAIiQzEZIkyOAQADQv/zMRgiEkSIAAWBAUL/54oAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.clear.teal b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.clear.teal index 886bca20..a4d58047 100644 --- a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.clear.teal +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.approval.0.ssa.ir b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.approval.0.ssa.ir new file mode 100644 index 00000000..952ea958 --- /dev/null +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.approval.0.ssa.ir @@ -0,0 +1,31 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__() -> bool: + block@0: // L21 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@2 + block@1: // abi_routing_L21 + goto block@6 + block@2: // bare_routing_L21 + let tmp%2#0: uint64 = (txn OnCompletion) + switch tmp%2#0 {0u => block@3, * => block@4} + block@3: // create_L14 + let tmp%3#0: uint64 = (txn ApplicationID) + let tmp%4#0: bool = (== tmp%3#0 0u) + (assert tmp%4#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() + return 1u + block@4: // switch_case_default_L21 + goto block@5 + block@5: // switch_case_next_L21 + goto block@6 + block@6: // after_if_else_L21 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: + block@0: // L14 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.clear.0.ssa.ir b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ir/ExplicitBareCreateFromBase.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ssa.ir b/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ssa.ir deleted file mode 100644 index f0713d71..00000000 --- a/tests/approvals/out/implicit-create/ExplicitBareCreateFromBase.ssa.ir +++ /dev/null @@ -1,38 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::ExplicitBareCreateFromBase.__puya_arc4_router__() -> bool: - block@0: // L21 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@2 - block@1: // abi_routing_L21 - goto block@6 - block@2: // bare_routing_L21 - let tmp%2#0: uint64 = (txn OnCompletion) - switch tmp%2#0 {0u => block@3, * => block@4} - block@3: // create_L14 - let tmp%3#0: uint64 = (txn ApplicationID) - let tmp%4#0: bool = (== tmp%3#0 0u) - (assert tmp%4#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() - return 1u - block@4: // switch_case_default_L21 - goto block@5 - block@5: // switch_case_next_L21 - goto block@6 - block@6: // after_if_else_L21 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::BaseWithBareCreate.create() -> void: - block@0: // L14 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoBare.approval.teal b/tests/approvals/out/implicit-create/NoBare.approval.teal index 38d6c6a7..29ee2da8 100644 --- a/tests/approvals/out/implicit-create/NoBare.approval.teal +++ b/tests/approvals/out/implicit-create/NoBare.approval.teal @@ -1,27 +1,39 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::NoBare.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:4 // export class NoBare extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/implicit-create.algo.ts:4 + // export class NoBare extends Contract { txna ApplicationArgs 0 pushbytes 0xb8b5e4b9 // method "handleNoop()void" swap - match __puya_arc4_router___handleNoop_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_handleNoop_route@3 + +main_switch_case_default@4: + +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/implicit-create.algo.ts:4 + // export class NoBare extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__@11: + return -__puya_arc4_router___handleNoop_route@2: +main_handleNoop_route@3: // tests/approvals/implicit-create.algo.ts:5 // @abimethod({ allowActions: 'NoOp' }) txn OnCompletion @@ -34,21 +46,22 @@ __puya_arc4_router___handleNoop_route@2: assert // can only call when not creating callsub handleNoop intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/implicit-create.algo.ts:4 // export class NoBare extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/implicit-create.algo.ts:4 // export class NoBare extends Contract { txn ApplicationID @@ -57,15 +70,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/implicit-create.algo.ts:4 - // export class NoBare extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__@11 // tests/approvals/implicit-create.algo.ts::NoBare.handleNoop() -> void: diff --git a/tests/approvals/out/implicit-create/NoBare.arc32.json b/tests/approvals/out/implicit-create/NoBare.arc32.json index 92ced6ec..7ec831fe 100644 --- a/tests/approvals/out/implicit-create/NoBare.arc32.json +++ b/tests/approvals/out/implicit-create/NoBare.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGI4YjVlNGI5IC8vIG1ldGhvZCAiaGFuZGxlTm9vcCgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZU5vb3Bfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZU5vb3Bfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo1CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaGFuZGxlTm9vcAogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBOb0JhcmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9CYXJlLmhhbmRsZU5vb3AoKSAtPiB2b2lkOgpoYW5kbGVOb29wOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjUtNgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlTm9vcCgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9CYXJlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YjhiNWU0YjkgLy8gbWV0aG9kICJoYW5kbGVOb29wKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9oYW5kbGVOb29wX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTE6CiAgICByZXR1cm4KCm1haW5faGFuZGxlTm9vcF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBoYW5kbGVOb29wCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5oYW5kbGVOb29wKCkgLT4gdm9pZDoKaGFuZGxlTm9vcDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo1LTYKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgLy8gcHVibGljIGhhbmRsZU5vb3AoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/NoBare.arc56.json b/tests/approvals/out/implicit-create/NoBare.arc56.json index 535d31ff..12c95c4a 100644 --- a/tests/approvals/out/implicit-create/NoBare.arc56.json +++ b/tests/approvals/out/implicit-create/NoBare.arc56.json @@ -57,19 +57,19 @@ "sourceInfo": [ { "pc": [ - 40 + 32 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 69 + 60 ], "errorMessage": "can only call when creating" }, { "pc": [ - 45 + 37 ], "errorMessage": "can only call when not creating" } @@ -82,8 +82,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGI4YjVlNGI5IC8vIG1ldGhvZCAiaGFuZGxlTm9vcCgpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZU5vb3Bfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZU5vb3Bfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo1CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgaGFuZGxlTm9vcAogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAzOgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBOb0JhcmUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9CYXJlLmhhbmRsZU5vb3AoKSAtPiB2b2lkOgpoYW5kbGVOb29wOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjUtNgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlTm9vcCgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9CYXJlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTm9CYXJlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YjhiNWU0YjkgLy8gbWV0aG9kICJoYW5kbGVOb29wKCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9oYW5kbGVOb29wX3JvdXRlQDMKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTE6CiAgICByZXR1cm4KCm1haW5faGFuZGxlTm9vcF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjUKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBoYW5kbGVOb29wCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA5OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb0JhcmUuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5oYW5kbGVOb29wKCkgLT4gdm9pZDoKaGFuZGxlTm9vcDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo1LTYKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgLy8gcHVibGljIGhhbmRsZU5vb3AoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vQmFyZS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE5vQmFyZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQAhNhoAgAS4teS5TI4BAAIiQzEZIhJEMRgiE0SIABsjQv/uMRkiTI4BAANC/+IxGCISRIgACCNC/9eKAACJigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/NoBare.clear.teal b/tests/approvals/out/implicit-create/NoBare.clear.teal index f8702e4f..a4d58047 100644 --- a/tests/approvals/out/implicit-create/NoBare.clear.teal +++ b/tests/approvals/out/implicit-create/NoBare.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::NoBare.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/NoBare.ir/NoBare.approval.0.ssa.ir b/tests/approvals/out/implicit-create/NoBare.ir/NoBare.approval.0.ssa.ir new file mode 100644 index 00000000..eee3819b --- /dev/null +++ b/tests/approvals/out/implicit-create/NoBare.ir/NoBare.approval.0.ssa.ir @@ -0,0 +1,49 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "handleNoop()void" => block@2, * => block@3} + block@2: // handleNoop_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/implicit-create.algo.ts::NoBare.handleNoop() + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + switch tmp%7#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L4 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (== tmp%8#0 0u) + (assert tmp%9#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::NoBare.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::NoBare.handleNoop() -> void: + block@0: // L5 + return + +subroutine tests/approvals/implicit-create.algo.ts::NoBare.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoBare.ir/NoBare.clear.0.ssa.ir b/tests/approvals/out/implicit-create/NoBare.ir/NoBare.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/NoBare.ir/NoBare.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoBare.ssa.ir b/tests/approvals/out/implicit-create/NoBare.ssa.ir deleted file mode 100644 index 5318fd06..00000000 --- a/tests/approvals/out/implicit-create/NoBare.ssa.ir +++ /dev/null @@ -1,56 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::NoBare: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::NoBare.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "handleNoop()void" => block@2, * => block@3} - block@2: // handleNoop_route_L5 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/implicit-create.algo.ts::NoBare.handleNoop() - return 1u - block@3: // switch_case_default_L4 - goto block@4 - block@4: // switch_case_next_L4 - goto block@9 - block@5: // bare_routing_L4 - let tmp%7#0: uint64 = (txn OnCompletion) - switch tmp%7#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L4 - let tmp%8#0: uint64 = (txn ApplicationID) - let tmp%9#0: bool = (== tmp%8#0 0u) - (assert tmp%9#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::NoBare.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L4 - goto block@8 - block@8: // switch_case_next_L4 - goto block@9 - block@9: // after_if_else_L4 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::NoBare.handleNoop() -> void: - block@0: // L5 - return - - subroutine tests/approvals/implicit-create.algo.ts::NoBare.__algots__.defaultCreate() -> void: - block@0: // L4 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoNoOp.approval.teal b/tests/approvals/out/implicit-create/NoNoOp.approval.teal index d56c4814..21d9168d 100644 --- a/tests/approvals/out/implicit-create/NoNoOp.approval.teal +++ b/tests/approvals/out/implicit-create/NoNoOp.approval.teal @@ -1,47 +1,43 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::NoNoOp.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/implicit-create.algo.ts:8 // export class NoNoOp extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@2 - b __puya_arc4_router___after_if_else@7 + bz main_bare_routing@3 + +main_abi_routing@2: + +main_after_if_else@8: + // tests/approvals/implicit-create.algo.ts:8 + // export class NoNoOp extends Contract { + intc_0 // 0 -__puya_arc4_router___bare_routing@2: +main_after_inlined_tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__@9: + return + +main_bare_routing@3: // tests/approvals/implicit-create.algo.ts:8 // export class NoNoOp extends Contract { txn OnCompletion pushint 4 // 4 intc_0 // 0 uncover 2 - match __puya_arc4_router___handleUpdate@3 __puya_arc4_router_____algots__.defaultCreate@4 - b __puya_arc4_router___switch_case_default@5 + match main_handleUpdate@4 main___algots__.defaultCreate@5 -__puya_arc4_router___handleUpdate@3: - // tests/approvals/implicit-create.algo.ts:9 - // @baremethod({ allowActions: 'UpdateApplication' }) - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - // tests/approvals/implicit-create.algo.ts:9-10 - // @baremethod({ allowActions: 'UpdateApplication' }) - // public handleUpdate() {} - callsub handleUpdate - intc_1 // 1 - retsub +main_switch_case_default@6: + +main_switch_case_next@7: + b main_after_if_else@8 -__puya_arc4_router_____algots__.defaultCreate@4: +main___algots__.defaultCreate@5: // tests/approvals/implicit-create.algo.ts:8 // export class NoNoOp extends Contract { txn ApplicationID @@ -50,15 +46,21 @@ __puya_arc4_router_____algots__.defaultCreate@4: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@5: + b main_after_inlined_tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__@9 -__puya_arc4_router___after_if_else@7: - // tests/approvals/implicit-create.algo.ts:8 - // export class NoNoOp extends Contract { +main_handleUpdate@4: + // tests/approvals/implicit-create.algo.ts:9 + // @baremethod({ allowActions: 'UpdateApplication' }) + txn ApplicationID intc_0 // 0 - retsub + != + assert // can only call when not creating + // tests/approvals/implicit-create.algo.ts:9-10 + // @baremethod({ allowActions: 'UpdateApplication' }) + // public handleUpdate() {} + callsub handleUpdate + intc_1 // 1 + b main_after_inlined_tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__@9 // tests/approvals/implicit-create.algo.ts::NoNoOp.handleUpdate() -> void: diff --git a/tests/approvals/out/implicit-create/NoNoOp.arc32.json b/tests/approvals/out/implicit-create/NoNoOp.arc32.json index fddbac11..6681e79b 100644 --- a/tests/approvals/out/implicit-create/NoNoOp.arc32.json +++ b/tests/approvals/out/implicit-create/NoNoOp.arc32.json @@ -1,8 +1,8 @@ { "hints": {}, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo4CiAgICAvLyBleHBvcnQgY2xhc3MgTm9Ob09wIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIDQKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZVVwZGF0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA0CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKX19wdXlhX2FyYzRfcm91dGVyX19faGFuZGxlVXBkYXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OS0xMAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHB1YmxpYyBoYW5kbGVVcGRhdGUoKSB7fQogICAgY2FsbHN1YiBoYW5kbGVVcGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuaGFuZGxlVXBkYXRlKCkgLT4gdm9pZDoKaGFuZGxlVXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjktMTAKICAgIC8vIEBiYXJlbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlVXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMKCm1haW5fYWJpX3JvdXRpbmdAMjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9Ob09wLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDk6CiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2hhbmRsZVVwZGF0ZUA0IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUA4CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9Ob09wLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDkKCm1haW5faGFuZGxlVXBkYXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OS0xMAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHB1YmxpYyBoYW5kbGVVcGRhdGUoKSB7fQogICAgY2FsbHN1YiBoYW5kbGVVcGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A5CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuaGFuZGxlVXBkYXRlKCkgLT4gdm9pZDoKaGFuZGxlVXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjktMTAKICAgIC8vIEBiYXJlbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlVXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/implicit-create/NoNoOp.arc56.json b/tests/approvals/out/implicit-create/NoNoOp.arc56.json index 6eb72904..79e9519c 100644 --- a/tests/approvals/out/implicit-create/NoNoOp.arc56.json +++ b/tests/approvals/out/implicit-create/NoNoOp.arc56.json @@ -42,13 +42,13 @@ "sourceInfo": [ { "pc": [ - 52 + 34 ], "errorMessage": "can only call when creating" }, { "pc": [ - 42 + 46 ], "errorMessage": "can only call when not creating" } @@ -61,8 +61,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDIKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo4CiAgICAvLyBleHBvcnQgY2xhc3MgTm9Ob09wIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIDQKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2hhbmRsZVVwZGF0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA0CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKX19wdXlhX2FyYzRfcm91dGVyX19faGFuZGxlVXBkYXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OS0xMAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHB1YmxpYyBoYW5kbGVVcGRhdGUoKSB7fQogICAgY2FsbHN1YiBoYW5kbGVVcGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuaGFuZGxlVXBkYXRlKCkgLT4gdm9pZDoKaGFuZGxlVXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjktMTAKICAgIC8vIEBiYXJlbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlVXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDMKCm1haW5fYWJpX3JvdXRpbmdAMjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9Ob09wLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDk6CiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIE5vTm9PcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2hhbmRsZVVwZGF0ZUA0IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUA4CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbXBsaWNpdC1jcmVhdGUuYWxnby50czo6Tm9Ob09wLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDkKCm1haW5faGFuZGxlVXBkYXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6OS0xMAogICAgLy8gQGJhcmVtZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHB1YmxpYyBoYW5kbGVVcGRhdGUoKSB7fQogICAgY2FsbHN1YiBoYW5kbGVVcGRhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW1wbGljaXQtY3JlYXRlLmFsZ28udHM6Ok5vTm9PcC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0A5CgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuaGFuZGxlVXBkYXRlKCkgLT4gdm9pZDoKaGFuZGxlVXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjktMTAKICAgIC8vIEBiYXJlbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBwdWJsaWMgaGFuZGxlVXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjpOb05vT3AuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2ltcGxpY2l0LWNyZWF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBOb05vT3AgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQACIkMxGYEEIk8CjgIADwADQv/uMRgiEkSIABQjQv/jMRgiE0SIAAQjQv/XigAAiYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/implicit-create/NoNoOp.clear.teal b/tests/approvals/out/implicit-create/NoNoOp.clear.teal index 606ab937..a4d58047 100644 --- a/tests/approvals/out/implicit-create/NoNoOp.clear.teal +++ b/tests/approvals/out/implicit-create/NoNoOp.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/implicit-create.algo.ts::NoNoOp.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.approval.0.ssa.ir b/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.approval.0.ssa.ir new file mode 100644 index 00000000..d5456bf4 --- /dev/null +++ b/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.approval.0.ssa.ir @@ -0,0 +1,41 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__() -> bool: + block@0: // L8 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@2 + block@1: // abi_routing_L8 + goto block@7 + block@2: // bare_routing_L8 + let tmp%2#0: uint64 = (txn OnCompletion) + switch tmp%2#0 {4u => block@3, 0u => block@4, * => block@5} + block@3: // handleUpdate_L9 + let tmp%3#0: uint64 = (txn ApplicationID) + let tmp%4#0: bool = (!= tmp%3#0 0u) + (assert tmp%4#0) // can only call when not creating + tests/approvals/implicit-create.algo.ts::NoNoOp.handleUpdate() + return 1u + block@4: // __algots__.defaultCreate_L8 + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + tests/approvals/implicit-create.algo.ts::NoNoOp.__algots__.defaultCreate() + return 1u + block@5: // switch_case_default_L8 + goto block@6 + block@6: // switch_case_next_L8 + goto block@7 + block@7: // after_if_else_L8 + return 0u + +subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.handleUpdate() -> void: + block@0: // L9 + return + +subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.__algots__.defaultCreate() -> void: + block@0: // L8 + return \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.clear.0.ssa.ir b/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/implicit-create/NoNoOp.ir/NoNoOp.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/implicit-create/NoNoOp.ssa.ir b/tests/approvals/out/implicit-create/NoNoOp.ssa.ir deleted file mode 100644 index 2d65ee36..00000000 --- a/tests/approvals/out/implicit-create/NoNoOp.ssa.ir +++ /dev/null @@ -1,48 +0,0 @@ -contract tests/approvals/implicit-create.algo.ts::NoNoOp: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.__puya_arc4_router__() -> bool: - block@0: // L8 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@2 - block@1: // abi_routing_L8 - goto block@7 - block@2: // bare_routing_L8 - let tmp%2#0: uint64 = (txn OnCompletion) - switch tmp%2#0 {4u => block@3, 0u => block@4, * => block@5} - block@3: // handleUpdate_L9 - let tmp%3#0: uint64 = (txn ApplicationID) - let tmp%4#0: bool = (!= tmp%3#0 0u) - (assert tmp%4#0) // can only call when not creating - tests/approvals/implicit-create.algo.ts::NoNoOp.handleUpdate() - return 1u - block@4: // __algots__.defaultCreate_L8 - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - tests/approvals/implicit-create.algo.ts::NoNoOp.__algots__.defaultCreate() - return 1u - block@5: // switch_case_default_L8 - goto block@6 - block@6: // switch_case_next_L8 - goto block@7 - block@7: // after_if_else_L8 - return 0u - - subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.handleUpdate() -> void: - block@0: // L9 - return - - subroutine tests/approvals/implicit-create.algo.ts::NoNoOp.__algots__.defaultCreate() -> void: - block@0: // L8 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.approval.teal b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.approval.teal index dfde29c9..29546273 100644 --- a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.approval.teal +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.approval.teal @@ -1,31 +1,43 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock 0x151f7c75 - callsub __puya_arc4_router__ - return - -// tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/inheritance-b.algo.ts:14 + // export class ConcreteArc4Contract extends Arc4Contract { txna ApplicationArgs 0 pushbytes 0xc73da9b9 // method "getVeryImportantValue()string" pushbytes 0xf161dc37 // method "simpleAbiMethod(uint64,uint64)uint64" uncover 2 - match __puya_arc4_router___getVeryImportantValue_route@2 __puya_arc4_router___simpleAbiMethod_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_getVeryImportantValue_route@3 main_simpleAbiMethod_route@4 -__puya_arc4_router___getVeryImportantValue_route@2: - // tests/approvals/inheritance-b.algo.ts:15 - // public getVeryImportantValue() { +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/inheritance-b.algo.ts:14 + // export class ConcreteArc4Contract extends Arc4Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12: + return + +main_simpleAbiMethod_route@4: + // tests/approvals/inheritance-a.algo.ts:17 + // public simpleAbiMethod(a: uint64, b: uint64): uint64 { txn OnCompletion intc_0 // NoOp == @@ -34,23 +46,26 @@ __puya_arc4_router___getVeryImportantValue_route@2: intc_0 // 0 != assert // can only call when not creating - callsub getVeryImportantValue - dup - len + // tests/approvals/inheritance-b.algo.ts:14 + // export class ConcreteArc4Contract extends Arc4Contract { + txna ApplicationArgs 1 + btoi + txna ApplicationArgs 2 + btoi + // tests/approvals/inheritance-a.algo.ts:17 + // public simpleAbiMethod(a: uint64, b: uint64): uint64 { + callsub simpleAbiMethod itob - extract 6 2 - swap - concat bytec_0 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 -__puya_arc4_router___simpleAbiMethod_route@3: - // tests/approvals/inheritance-a.algo.ts:17 - // public simpleAbiMethod(a: uint64, b: uint64): uint64 { +main_getVeryImportantValue_route@3: + // tests/approvals/inheritance-b.algo.ts:15 + // public getVeryImportantValue() { txn OnCompletion intc_0 // NoOp == @@ -59,36 +74,34 @@ __puya_arc4_router___simpleAbiMethod_route@3: intc_0 // 0 != assert // can only call when not creating - // tests/approvals/inheritance-b.algo.ts:14 - // export class ConcreteArc4Contract extends Arc4Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/approvals/inheritance-a.algo.ts:17 - // public simpleAbiMethod(a: uint64, b: uint64): uint64 { - callsub simpleAbiMethod + callsub getVeryImportantValue + dup + len itob + extract 6 2 + swap + concat bytec_0 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 - -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/inheritance-b.algo.ts:14 // export class ConcreteArc4Contract extends Arc4Contract { txn ApplicationID @@ -97,15 +110,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/inheritance-b.algo.ts:14 - // export class ConcreteArc4Contract extends Arc4Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__@12 // tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc32.json b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc32.json index c410eb60..414f9502 100644 --- a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc32.json +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhjNzNkYTliOSAvLyBtZXRob2QgImdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjE2MWRjMzcgLy8gbWV0aG9kICJzaW1wbGVBYmlNZXRob2QodWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3NpbXBsZUFiaU1ldGhvZF9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRWZXJ5SW1wb3J0YW50VmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zaW1wbGVBYmlNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0LmdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpIC0+IGJ5dGVzOgpnZXRWZXJ5SW1wb3J0YW50VmFsdWU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjIyCiAgICAvLyBleHBvcnQgY29uc3QgVkVSWV9JTVBPUlRBTlRfVkFMVUUgPSAnNDInCiAgICBwdXNoYnl0ZXMgIjQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNgogICAgLy8gcmV0dXJuIFZFUllfSU1QT1JUQU5UX1ZBTFVFCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjpBcmM0Q29udHJhY3Quc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnNpbXBsZUFiaU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YzczZGE5YjkgLy8gbWV0aG9kICJnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGYxNjFkYzM3IC8vIG1ldGhvZCAic2ltcGxlQWJpTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAzIG1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFZlcnlJbXBvcnRhbnRWYWx1ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgLT4gYnl0ZXM6CmdldFZlcnlJbXBvcnRhbnRWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MjIKICAgIC8vIGV4cG9ydCBjb25zdCBWRVJZX0lNUE9SVEFOVF9WQUxVRSA9ICc0MicKICAgIHB1c2hieXRlcyAiNDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyByZXR1cm4gVkVSWV9JTVBPUlRBTlRfVkFMVUUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc56.json b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc56.json index 724bf15c..e7b49d97 100644 --- a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc56.json +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.arc56.json @@ -88,21 +88,21 @@ "sourceInfo": [ { "pc": [ - 56, - 83 + 48, + 78 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 125 + 118 ], "errorMessage": "can only call when creating" }, { "pc": [ - 61, - 88 + 53, + 83 ], "errorMessage": "can only call when not creating" } @@ -115,8 +115,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhjNzNkYTliOSAvLyBtZXRob2QgImdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZjE2MWRjMzcgLy8gbWV0aG9kICJzaW1wbGVBYmlNZXRob2QodWludDY0LHVpbnQ2NCl1aW50NjQiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3NpbXBsZUFiaU1ldGhvZF9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0VmVyeUltcG9ydGFudFZhbHVlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRWZXJ5SW1wb3J0YW50VmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zaW1wbGVBYmlNZXRob2Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAOAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAODoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0LmdldFZlcnlJbXBvcnRhbnRWYWx1ZSgpIC0+IGJ5dGVzOgpnZXRWZXJ5SW1wb3J0YW50VmFsdWU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjIyCiAgICAvLyBleHBvcnQgY29uc3QgVkVSWV9JTVBPUlRBTlRfVkFMVUUgPSAnNDInCiAgICBwdXNoYnl0ZXMgIjQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNgogICAgLy8gcmV0dXJuIFZFUllfSU1QT1JUQU5UX1ZBTFVFCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjpBcmM0Q29udHJhY3Quc2ltcGxlQWJpTWV0aG9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnNpbXBsZUFiaU1ldGhvZDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYS5hbGdvLnRzOjE4CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YzczZGE5YjkgLy8gbWV0aG9kICJnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGYxNjFkYzM3IC8vIG1ldGhvZCAic2ltcGxlQWJpTWV0aG9kKHVpbnQ2NCx1aW50NjQpdWludDY0IgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldFZlcnlJbXBvcnRhbnRWYWx1ZV9yb3V0ZUAzIG1haW5fc2ltcGxlQWJpTWV0aG9kX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgQ29uY3JldGVBcmM0Q29udHJhY3QgZXh0ZW5kcyBBcmM0Q29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9zaW1wbGVBYmlNZXRob2Rfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIENvbmNyZXRlQXJjNENvbnRyYWN0IGV4dGVuZHMgQXJjNENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBzaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgY2FsbHN1YiBzaW1wbGVBYmlNZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9nZXRWZXJ5SW1wb3J0YW50VmFsdWVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFZlcnlJbXBvcnRhbnRWYWx1ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjpDb25jcmV0ZUFyYzRDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWIuYWxnby50czo6Q29uY3JldGVBcmM0Q29udHJhY3QuZ2V0VmVyeUltcG9ydGFudFZhbHVlKCkgLT4gYnl0ZXM6CmdldFZlcnlJbXBvcnRhbnRWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRWZXJ5SW1wb3J0YW50VmFsdWUoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MjIKICAgIC8vIGV4cG9ydCBjb25zdCBWRVJZX0lNUE9SVEFOVF9WQUxVRSA9ICc0MicKICAgIHB1c2hieXRlcyAiNDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvaW5oZXJpdGFuY2UtYi5hbGdvLnRzOjE2CiAgICAvLyByZXR1cm4gVkVSWV9JTVBPUlRBTlRfVkFMVUUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6OkFyYzRDb250cmFjdC5zaW1wbGVBYmlNZXRob2QoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKc2ltcGxlQWJpTWV0aG9kOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2luaGVyaXRhbmNlLWEuYWxnby50czoxNwogICAgLy8gcHVibGljIHNpbXBsZUFiaU1ldGhvZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1hLmFsZ28udHM6MTgKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6OkNvbmNyZXRlQXJjNENvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9pbmhlcml0YW5jZS1iLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBDb25jcmV0ZUFyYzRDb250cmFjdCBleHRlbmRzIEFyYzRDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQQVH3x1MRsiE0EAVDYaAIAExz2puYAE8WHcN08CjgIAIAACIkMxGSISRDEYIhNENhoBFzYaAheIAEUWKExQsCNC/+ExGSISRDEYIhNEiAAnSRUWVwYCTFAoTFCwI0L/xDEZIkyOAQADQv+4MRgiEkSIABUjQv+tigABgAI0MomKAgGL/ov/CImKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.clear.teal b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.clear.teal index 4395c80a..a4d58047 100644 --- a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.clear.teal +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir new file mode 100644 index 00000000..7d3892ab --- /dev/null +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.approval.0.ssa.ir @@ -0,0 +1,76 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() -> bool: + block@0: // L14 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L14 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "getVeryImportantValue()string" => block@2, method "simpleAbiMethod(uint64,uint64)uint64" => block@3, * => block@4} + block@2: // getVeryImportantValue_route_L15 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bytes = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%7#0) + return 1u + block@3: // simpleAbiMethod_route_L17 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let tmp%12#0: bytes = (txna ApplicationArgs 1) + let tmp%13#0: uint64 = (btoi tmp%12#0) + let tmp%14#0: bytes = (txna ApplicationArgs 2) + let tmp%15#0: uint64 = (btoi tmp%14#0) + let to_encode%1#0: uint64 = tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(tmp%13#0, tmp%15#0) + let val_as_bytes%0#0: bytes = (itob to_encode%1#0) + let tmp%16#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%16#0) + return 1u + block@4: // switch_case_default_L14 + goto block@5 + block@5: // switch_case_next_L14 + goto block@10 + block@6: // bare_routing_L14 + let tmp%17#0: uint64 = (txn OnCompletion) + switch tmp%17#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L14 + let tmp%18#0: uint64 = (txn ApplicationID) + let tmp%19#0: bool = (== tmp%18#0 0u) + (assert tmp%19#0) // can only call when creating + tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L14 + goto block@9 + block@9: // switch_case_next_L14 + goto block@10 + block@10: // after_if_else_L14 + return 0u + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: + block@0: // L15 + return "42" + +subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: + block@0: // L17 + let tmp%0#0: uint64 = (+ a#0 b#0) + return tmp%0#0 + +subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: + block@0: // L14 + return \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.clear.0.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ir/ConcreteArc4Contract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ssa.ir deleted file mode 100644 index 2cdb9f3c..00000000 --- a/tests/approvals/out/inheritance-b/ConcreteArc4Contract.ssa.ir +++ /dev/null @@ -1,83 +0,0 @@ -contract tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__puya_arc4_router__() -> bool: - block@0: // L14 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L14 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getVeryImportantValue()string" => block@2, method "simpleAbiMethod(uint64,uint64)uint64" => block@3, * => block@4} - block@2: // getVeryImportantValue_route_L15 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bytes = tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%7#0) - return 1u - block@3: // simpleAbiMethod_route_L17 - let tmp%8#0: uint64 = (txn OnCompletion) - let tmp%9#0: bool = (== tmp%8#0 NoOp) - (assert tmp%9#0) // OnCompletion is not NoOp - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (!= tmp%10#0 0u) - (assert tmp%11#0) // can only call when not creating - let tmp%12#0: bytes = (txna ApplicationArgs 1) - let tmp%13#0: uint64 = (btoi tmp%12#0) - let tmp%14#0: bytes = (txna ApplicationArgs 2) - let tmp%15#0: uint64 = (btoi tmp%14#0) - let to_encode%1#0: uint64 = tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(tmp%13#0, tmp%15#0) - let val_as_bytes%0#0: bytes = (itob to_encode%1#0) - let tmp%16#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%16#0) - return 1u - block@4: // switch_case_default_L14 - goto block@5 - block@5: // switch_case_next_L14 - goto block@10 - block@6: // bare_routing_L14 - let tmp%17#0: uint64 = (txn OnCompletion) - switch tmp%17#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L14 - let tmp%18#0: uint64 = (txn ApplicationID) - let tmp%19#0: bool = (== tmp%18#0 0u) - (assert tmp%19#0) // can only call when creating - tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L14 - goto block@9 - block@9: // switch_case_next_L14 - goto block@10 - block@10: // after_if_else_L14 - return 0u - - subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.getVeryImportantValue() -> bytes: - block@0: // L15 - return "42" - - subroutine tests/approvals/inheritance-a.algo.ts::Arc4Contract.simpleAbiMethod(a: uint64, b: uint64) -> uint64: - block@0: // L17 - let tmp%0#0: uint64 = (+ a#0 b#0) - return tmp%0#0 - - subroutine tests/approvals/inheritance-b.algo.ts::ConcreteArc4Contract.__algots__.defaultCreate() -> void: - block@0: // L14 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.approval.teal b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.approval.teal index 9f21af42..21f3cdfa 100644 --- a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.approval.teal +++ b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract.approvalProgram: +// tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract.approvalProgram() -> uint64: +main: // tests/approvals/inheritance-b.algo.ts:7 // const a = op.btoi(Txn.applicationArgs(0)) pushint 0 // 0 diff --git a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.clear.teal b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.clear.teal index c267c61a..a4d58047 100644 --- a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.clear.teal +++ b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.approval.0.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.approval.0.ssa.ir new file mode 100644 index 00000000..200db019 --- /dev/null +++ b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.approval.0.ssa.ir @@ -0,0 +1,15 @@ +main tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract.approvalProgram: + block@0: // L6 + let tmp%0#0: bytes = ((txnas ApplicationArgs) 0u) + let a#0: uint64 = (btoi tmp%0#0) + let tmp%1#0: bytes = ((txnas ApplicationArgs) 1u) + let b#0: uint64 = (btoi tmp%1#0) + let tmp%2#0: uint64 = tests/approvals/inheritance-a.algo.ts::SimpleContract.simpleMethod(a#0, b#0) + let tmp%3#0: bytes = (itob tmp%2#0) + (log tmp%3#0) + return 1u + +subroutine tests/approvals/inheritance-a.algo.ts::SimpleContract.simpleMethod(a: uint64, b: uint64) -> uint64: + block@0: // L6 + let tmp%0#0: uint64 = (* a#0 b#0) + return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.clear.0.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ir/ConcreteSimpleContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ssa.ir b/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ssa.ir deleted file mode 100644 index a60186f4..00000000 --- a/tests/approvals/out/inheritance-b/ConcreteSimpleContract.ssa.ir +++ /dev/null @@ -1,22 +0,0 @@ -contract tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract: - program approval: - subroutine tests/approvals/inheritance-b.algo.ts::ConcreteSimpleContract.approvalProgram() -> uint64: - block@0: // L6 - let tmp%0#0: bytes = ((txnas ApplicationArgs) 0u) - let a#0: uint64 = (btoi tmp%0#0) - let tmp%1#0: bytes = ((txnas ApplicationArgs) 1u) - let b#0: uint64 = (btoi tmp%1#0) - let tmp%2#0: uint64 = tests/approvals/inheritance-a.algo.ts::SimpleContract.simpleMethod(a#0, b#0) - let tmp%3#0: bytes = (itob tmp%2#0) - (log tmp%3#0) - return 1u - - subroutine tests/approvals/inheritance-a.algo.ts::SimpleContract.simpleMethod(a: uint64, b: uint64) -> uint64: - block@0: // L6 - let tmp%0#0: uint64 = (* a#0 b#0) - return tmp%0#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/itxn/ItxnDemoContract.approval.teal b/tests/approvals/out/itxn/ItxnDemoContract.approval.teal index 619c0109..7af40854 100644 --- a/tests/approvals/out/itxn/ItxnDemoContract.approval.teal +++ b/tests/approvals/out/itxn/ItxnDemoContract.approval.teal @@ -1,10 +1,14 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/itxn.algo.ts::ItxnDemoContract.approvalProgram: +// tests/approvals/itxn.algo.ts::ItxnDemoContract.approvalProgram() -> uint64: +main: intcblock 0 3 1 1000 - bytecblock "name" "unit" 0x098101 "AST1" "AST2" "AST3" "3rd" "with args param set" "\t\xc2\x81\x01" + bytecblock "name" "unit" 0x098101 0x "AST1" "AST2" "AST3" "3rd" "with args param set" "\t\xc2\x81\x01" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: @@ -12,6 +16,8 @@ main_after_if_else@2: // if (Txn.numAppArgs) { txn NumAppArgs bz main_after_if_else@15 + +main_if_body@3: // tests/approvals/itxn.algo.ts:12 // switch (Txn.applicationArgs(0)) { intc_0 // 0 @@ -42,45 +48,52 @@ main_after_if_else@2: // } uncover 4 match main_switch_case_0@4 main_switch_case_1@6 main_switch_case_2@8 main_switch_case_3@10 - b main_switch_case_default@12 -main_switch_case_0@4: - // tests/approvals/itxn.algo.ts:14 - // this.test1() - callsub test1 - // tests/approvals/itxn.algo.ts:15 - // break - b main_block@14 +main_switch_case_default@12: -main_switch_case_1@6: - // tests/approvals/itxn.algo.ts:17 - // this.test2() - callsub test2 - // tests/approvals/itxn.algo.ts:18 +main_switch_case_next@13: + +main_block@14: + +main_after_if_else@15: + // tests/approvals/itxn.algo.ts:24 + // return true + intc_2 // 1 + return + +main_switch_case_3@10: + +main_block@11: + // tests/approvals/itxn.algo.ts:21 // break b main_block@14 main_switch_case_2@8: + +main_block@9: // tests/approvals/itxn.algo.ts:19 // case Bytes('test3'): b main_block@11 -main_switch_case_3@10: +main_switch_case_1@6: -main_block@11: - // tests/approvals/itxn.algo.ts:21 +main_block@7: + // tests/approvals/itxn.algo.ts:17 + // this.test2() + callsub test2 + // tests/approvals/itxn.algo.ts:18 // break b main_block@14 -main_switch_case_default@12: - -main_block@14: +main_switch_case_0@4: -main_after_if_else@15: - // tests/approvals/itxn.algo.ts:24 - // return true - intc_2 // 1 - return +main_block@5: + // tests/approvals/itxn.algo.ts:14 + // this.test1() + callsub test1 + // tests/approvals/itxn.algo.ts:15 + // break + b main_block@14 // tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: @@ -91,7 +104,7 @@ constructor: // tests/approvals/itxn.algo.ts:8 // name = GlobalState({ initialValue: Bytes() }) bytec_0 // "name" - pushbytes 0x + bytec_3 // 0x app_global_put retsub @@ -107,7 +120,7 @@ test1: bytec_0 // "name" // tests/approvals/itxn.algo.ts:28 // this.name.value = Bytes('AST1') - bytec_3 // "AST1" + bytec 4 // "AST1" app_global_put // tests/approvals/itxn.algo.ts:32 // assetName: this.name.value, @@ -134,7 +147,7 @@ test1: bytec_0 // "name" // tests/approvals/itxn.algo.ts:39 // this.name.value = Bytes('AST2') - bytec 4 // "AST2" + bytec 5 // "AST2" app_global_put // tests/approvals/itxn.algo.ts:40 // const asset1_txn = assetParams.submit() @@ -167,6 +180,8 @@ test1: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test1_next_txn@1: // tests/approvals/itxn.algo.ts:40 // const asset1_txn = assetParams.submit() itxn_submit @@ -216,6 +231,8 @@ test1: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test1_next_txn@2: // tests/approvals/itxn.algo.ts:44 // const asset2_txn = assetParams.submit() itxn_submit @@ -225,12 +242,12 @@ test1: // tests/approvals/itxn.algo.ts:46 // assert(asset1_txn.assetName === Bytes('AST1'), 'asset1_txn is correct') frame_dig 0 - bytec_3 // "AST1" + bytec 4 // "AST1" == assert // asset1_txn is correct // tests/approvals/itxn.algo.ts:47 // assert(asset2_txn.assetName === Bytes('AST2'), 'asset2_txn is correct') - bytec 4 // "AST2" + bytec 5 // "AST2" == assert // asset2_txn is correct // tests/approvals/itxn.algo.ts:48 @@ -238,14 +255,14 @@ test1: swap asset_params_get AssetName assert // asset exists - bytec_3 // "AST1" + bytec 4 // "AST1" == assert // created asset 1 is correct // tests/approvals/itxn.algo.ts:49 // assert(asset2_txn.createdAsset.name === Bytes('AST2'), 'created asset 2 is correct') asset_params_get AssetName assert // asset exists - bytec 4 // "AST2" + bytec 5 // "AST2" == assert // created asset 2 is correct // tests/approvals/itxn.algo.ts:61 @@ -271,6 +288,8 @@ test1: // fee: 0, intc_0 // 0 itxn_field Fee + +test1_next_txn@3: // tests/approvals/itxn.algo.ts:61 // const [appCreateTxn, asset3_txn] = itxn.submitGroup(appCreateParams, assetParams) itxn_next @@ -288,7 +307,7 @@ test1: itxn_field ConfigAssetUnitName // tests/approvals/itxn.algo.ts:58 // assetName: 'AST3', - bytec 5 // "AST3" + bytec 6 // "AST3" itxn_field ConfigAssetName // tests/approvals/itxn.algo.ts:31 // total: 1000, @@ -307,6 +326,8 @@ test1: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test1_next_txn@4: // tests/approvals/itxn.algo.ts:61 // const [appCreateTxn, asset3_txn] = itxn.submitGroup(appCreateParams, assetParams) itxn_submit @@ -318,7 +339,7 @@ test1: assert // app is created // tests/approvals/itxn.algo.ts:64 // assert(asset3_txn.assetName === Bytes('AST3'), 'asset3_txn is correct') - bytec 5 // "AST3" + bytec 6 // "AST3" == assert // asset3_txn is correct // tests/approvals/itxn.algo.ts:72 @@ -332,9 +353,11 @@ test1: // tests/approvals/itxn.algo.ts:72 // itxn.submitGroup(appCreateParams, assetParams) bz test1_next_field@6 + +test1_set_Note_0_to_0@5: // tests/approvals/itxn.algo.ts:67 // note: '3rd', - bytec 6 // "3rd" + bytec 7 // "3rd" itxn_field Note test1_next_field@6: @@ -358,6 +381,8 @@ test1_next_field@6: // fee: 0, intc_0 // 0 itxn_field Fee + +test1_next_txn@7: // tests/approvals/itxn.algo.ts:72 // itxn.submitGroup(appCreateParams, assetParams) itxn_next @@ -369,9 +394,11 @@ test1_next_field@6: // tests/approvals/itxn.algo.ts:72 // itxn.submitGroup(appCreateParams, assetParams) bz test1_next_field@9 + +test1_set_Note_0_to_0@8: // tests/approvals/itxn.algo.ts:70 // note: '3rd', - bytec 6 // "3rd" + bytec 7 // "3rd" itxn_field Note test1_next_field@9: @@ -389,7 +416,7 @@ test1_next_field@9: itxn_field ConfigAssetUnitName // tests/approvals/itxn.algo.ts:58 // assetName: 'AST3', - bytec 5 // "AST3" + bytec 6 // "AST3" itxn_field ConfigAssetName // tests/approvals/itxn.algo.ts:31 // total: 1000, @@ -408,6 +435,8 @@ test1_next_field@9: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test1_next_txn@10: // tests/approvals/itxn.algo.ts:72 // itxn.submitGroup(appCreateParams, assetParams) itxn_submit @@ -420,13 +449,17 @@ test2: // private test2() { proto 0 0 intc_0 // 0 - dupn 2 - pushbytes "" - dupn 2 + dup + bytec_3 // "" + dup + intc_0 // 0 + bytec_3 // "" // tests/approvals/itxn.algo.ts:77 // if (Txn.numAppArgs) { txn NumAppArgs bz test2_else_body@2 + +test2_if_body@1: // tests/approvals/itxn.algo.ts:78 // const args = [Bytes('1'), Bytes('2')] as const pushbytes "1" @@ -436,46 +469,28 @@ test2: // tests/approvals/itxn.algo.ts:82 // appArgs: args, pushint 2 // 2 - frame_bury 3 + frame_bury 2 // tests/approvals/itxn.algo.ts:83 // onCompletion: OnCompleteAction.NoOp, intc_0 // 0 frame_bury 5 intc_2 // 1 - frame_bury 4 + frame_bury 3 // tests/approvals/itxn.algo.ts:84 // note: 'with args param set', - bytec 7 // "with args param set" - b test2_after_if_else@3 - -test2_else_body@2: - // tests/approvals/itxn.algo.ts:90 - // appArgs: [Bytes('3'), '4', Bytes('5')], - pushbytes "3" - frame_bury 0 - pushbytes "4" - frame_bury 1 - pushbytes "5" - frame_bury 2 - intc_1 // 3 - frame_bury 3 - // tests/approvals/itxn.algo.ts:91 - // note: 'no args param set', - pushbytes "no args param set" - // tests/approvals/itxn.algo.ts:87 - // createAppParams = itxn.applicationCall({ - intc_0 // 0 - frame_bury 4 + bytec 8 // "with args param set" test2_after_if_else@3: // tests/approvals/itxn.algo.ts:94 // const createAppTxn = createAppParams.submit() itxn_begin itxn_field Note - frame_dig 4 + frame_dig 3 intc_2 // 1 >= bz test2_next_field@5 + +test2_set_OnCompletion_0_to_0@4: frame_dig 5 itxn_field OnCompletion @@ -484,21 +499,23 @@ test2_next_field@5: itxn_field ApplicationArgs frame_dig 1 itxn_field ApplicationArgs - frame_dig 3 + frame_dig 2 intc_1 // 3 >= // tests/approvals/itxn.algo.ts:94 // const createAppTxn = createAppParams.submit() bz test2_next_field@7 - frame_dig 2 + +test2_set_ApplicationArgs_2_to_2@6: + frame_dig 4 itxn_field ApplicationArgs test2_next_field@7: // tests/approvals/itxn.algo.ts:5 // const APPROVE = Bytes('\x09\x81\x01') - bytec 8 // "\t\xc2\x81\x01" + bytec 9 // "\t\xc2\x81\x01" itxn_field ClearStateProgramPages - bytec 8 // "\t\xc2\x81\x01" + bytec 9 // "\t\xc2\x81\x01" itxn_field ApprovalProgramPages // tests/approvals/itxn.algo.ts:79-85 // createAppParams = itxn.applicationCall({ @@ -512,6 +529,8 @@ test2_next_field@7: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test2_next_txn@8: // tests/approvals/itxn.algo.ts:94 // const createAppTxn = createAppParams.submit() itxn_submit @@ -532,7 +551,27 @@ test2_next_field@7: assert // correct args used 2 // tests/approvals/itxn.algo.ts:97 // assert(createAppTxn.note === Bytes('with args param set')) - bytec 7 // "with args param set" + bytec 8 // "with args param set" == assert retsub + +test2_else_body@2: + // tests/approvals/itxn.algo.ts:90 + // appArgs: [Bytes('3'), '4', Bytes('5')], + pushbytes "3" + frame_bury 0 + pushbytes "4" + frame_bury 1 + pushbytes "5" + frame_bury 4 + intc_1 // 3 + frame_bury 2 + // tests/approvals/itxn.algo.ts:91 + // note: 'no args param set', + pushbytes "no args param set" + // tests/approvals/itxn.algo.ts:87 + // createAppParams = itxn.applicationCall({ + intc_0 // 0 + frame_bury 3 + b test2_after_if_else@3 diff --git a/tests/approvals/out/itxn/ItxnDemoContract.clear.teal b/tests/approvals/out/itxn/ItxnDemoContract.clear.teal index e2af30bc..a4d58047 100644 --- a/tests/approvals/out/itxn/ItxnDemoContract.clear.teal +++ b/tests/approvals/out/itxn/ItxnDemoContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/itxn.algo.ts::ItxnDemoContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir b/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir new file mode 100644 index 00000000..22f0e1b1 --- /dev/null +++ b/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.approval.0.ssa.ir @@ -0,0 +1,763 @@ +main tests/approvals/itxn.algo.ts::ItxnDemoContract.approvalProgram: + block@0: // L10 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let reinterpret_bool%1#0: bool = (txn NumAppArgs) + goto reinterpret_bool%1#0 ? block@3 : block@15 + block@3: // if_body_L11 + let tmp%0#0: bytes = ((txnas ApplicationArgs) 0u) + switch tmp%0#0 {"test1" => block@4, "test2" => block@6, "test3" => block@8, "test4" => block@10, * => block@12} + block@4: // switch_case_0_L13 + goto block@5 + block@5: // L13 + tests/approvals/itxn.algo.ts::ItxnDemoContract.test1() + goto block@14 + block@6: // switch_case_1_L16 + goto block@7 + block@7: // L16 + tests/approvals/itxn.algo.ts::ItxnDemoContract.test2() + goto block@14 + block@8: // switch_case_2_L19 + goto block@9 + block@9: // L19 + goto block@11 + block@10: // switch_case_3_L20 + goto block@11 + block@11: // L20 + goto block@14 + block@12: // switch_case_default_L12 + goto block@13 + block@13: // switch_case_next_L12 + goto block@14 + block@14: // L12 + goto block@15 + block@15: // after_if_else_L11 + return 1u + +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: + block@0: // L7 + (app_global_put "name" 0x) + return + +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test1() -> void: + block@0: // L27 + (app_global_put "name" "AST1") + let assetParams#0: itxn_field_set = itxn_field_set(0) + let assetParams%%param_Fee_idx_0#0: uint64 = 0u + let assetParams%%Fee_length#0: uint64 = 1u + let assetParams%%param_TypeEnum_idx_0#0: uint64 = 3u + let assetParams%%TypeEnum_length#0: uint64 = 1u + let assetParams%%param_ConfigAssetTotal_idx_0#0: uint64 = 1000u + let assetParams%%ConfigAssetTotal_length#0: uint64 = 1u + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "name") + (assert maybe_exists%0#0) // check GlobalState exists + let assetParams%%param_ConfigAssetName_idx_0#0: bytes = maybe_value%0#0 + let assetParams%%ConfigAssetName_length#0: uint64 = 1u + let assetParams%%param_ConfigAssetUnitName_idx_0#0: bytes = "unit" + let assetParams%%ConfigAssetUnitName_length#0: uint64 = 1u + let assetParams%%param_ConfigAssetDecimals_idx_0#0: uint64 = 3u + let assetParams%%ConfigAssetDecimals_length#0: uint64 = 1u + let assetParams%%param_ConfigAssetManager_idx_0#0: bytes = (global CurrentApplicationAddress) + let assetParams%%ConfigAssetManager_length#0: uint64 = 1u + let assetParams%%param_ConfigAssetReserve_idx_0#0: bytes = (global CurrentApplicationAddress) + let assetParams%%ConfigAssetReserve_length#0: uint64 = 1u + let assetParams%%Sender_length#0: uint64 = 0u + let assetParams%%Note_length#0: uint64 = 0u + let assetParams%%Receiver_length#0: uint64 = 0u + let assetParams%%Amount_length#0: uint64 = 0u + let assetParams%%CloseRemainderTo_length#0: uint64 = 0u + let assetParams%%VotePK_length#0: uint64 = 0u + let assetParams%%SelectionPK_length#0: uint64 = 0u + let assetParams%%VoteFirst_length#0: uint64 = 0u + let assetParams%%VoteLast_length#0: uint64 = 0u + let assetParams%%VoteKeyDilution_length#0: uint64 = 0u + let assetParams%%Type_length#0: uint64 = 0u + let assetParams%%XferAsset_length#0: uint64 = 0u + let assetParams%%AssetAmount_length#0: uint64 = 0u + let assetParams%%AssetSender_length#0: uint64 = 0u + let assetParams%%AssetReceiver_length#0: uint64 = 0u + let assetParams%%AssetCloseTo_length#0: uint64 = 0u + let assetParams%%ApplicationID_length#0: uint64 = 0u + let assetParams%%OnCompletion_length#0: uint64 = 0u + let assetParams%%ApprovalProgram_length#0: uint64 = 0u + let assetParams%%ClearStateProgram_length#0: uint64 = 0u + let assetParams%%RekeyTo_length#0: uint64 = 0u + let assetParams%%ConfigAsset_length#0: uint64 = 0u + let assetParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let assetParams%%ConfigAssetURL_length#0: uint64 = 0u + let assetParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let assetParams%%ConfigAssetFreeze_length#0: uint64 = 0u + let assetParams%%ConfigAssetClawback_length#0: uint64 = 0u + let assetParams%%FreezeAsset_length#0: uint64 = 0u + let assetParams%%FreezeAssetAccount_length#0: uint64 = 0u + let assetParams%%FreezeAssetFrozen_length#0: uint64 = 0u + let assetParams%%GlobalNumUint_length#0: uint64 = 0u + let assetParams%%GlobalNumByteSlice_length#0: uint64 = 0u + let assetParams%%LocalNumUint_length#0: uint64 = 0u + let assetParams%%LocalNumByteSlice_length#0: uint64 = 0u + let assetParams%%ExtraProgramPages_length#0: uint64 = 0u + let assetParams%%Nonparticipation_length#0: uint64 = 0u + let assetParams%%StateProofPK_length#0: uint64 = 0u + let assetParams%%ApplicationArgs_length#0: uint64 = 0u + let assetParams%%Accounts_length#0: uint64 = 0u + let assetParams%%Assets_length#0: uint64 = 0u + let assetParams%%Applications_length#0: uint64 = 0u + let assetParams%%ApprovalProgramPages_length#0: uint64 = 0u + let assetParams%%ClearStateProgramPages_length#0: uint64 = 0u + (app_global_put "name" "AST2") + itxn_begin + ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) + ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) + ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) + ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) + ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#0) + ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) + ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L40 + itxn_submit + let asset1_txn#0: itxn_group_idx = itxn_group_idx(0) + let asset1_txn._is_last#0: bool = 1u + let asset1_txn.Sender#0: bytes = itxn[asset1_txn#0].Sender + let asset1_txn.Fee#0: uint64 = itxn[asset1_txn#0].Fee + let asset1_txn.FirstValid#0: uint64 = itxn[asset1_txn#0].FirstValid + let asset1_txn.FirstValidTime#0: uint64 = itxn[asset1_txn#0].FirstValidTime + let asset1_txn.LastValid#0: uint64 = itxn[asset1_txn#0].LastValid + let asset1_txn.Note#0: bytes = itxn[asset1_txn#0].Note + let asset1_txn.Lease#0: bytes = itxn[asset1_txn#0].Lease + let asset1_txn.Receiver#0: bytes = itxn[asset1_txn#0].Receiver + let asset1_txn.Amount#0: uint64 = itxn[asset1_txn#0].Amount + let asset1_txn.CloseRemainderTo#0: bytes = itxn[asset1_txn#0].CloseRemainderTo + let asset1_txn.VotePK#0: bytes = itxn[asset1_txn#0].VotePK + let asset1_txn.SelectionPK#0: bytes = itxn[asset1_txn#0].SelectionPK + let asset1_txn.VoteFirst#0: uint64 = itxn[asset1_txn#0].VoteFirst + let asset1_txn.VoteLast#0: uint64 = itxn[asset1_txn#0].VoteLast + let asset1_txn.VoteKeyDilution#0: uint64 = itxn[asset1_txn#0].VoteKeyDilution + let asset1_txn.Type#0: bytes = itxn[asset1_txn#0].Type + let asset1_txn.TypeEnum#0: uint64 = itxn[asset1_txn#0].TypeEnum + let asset1_txn.XferAsset#0: uint64 = itxn[asset1_txn#0].XferAsset + let asset1_txn.AssetAmount#0: uint64 = itxn[asset1_txn#0].AssetAmount + let asset1_txn.AssetSender#0: bytes = itxn[asset1_txn#0].AssetSender + let asset1_txn.AssetReceiver#0: bytes = itxn[asset1_txn#0].AssetReceiver + let asset1_txn.AssetCloseTo#0: bytes = itxn[asset1_txn#0].AssetCloseTo + let asset1_txn.GroupIndex#0: uint64 = itxn[asset1_txn#0].GroupIndex + let asset1_txn.TxID#0: bytes = itxn[asset1_txn#0].TxID + let asset1_txn.ApplicationID#0: uint64 = itxn[asset1_txn#0].ApplicationID + let asset1_txn.OnCompletion#0: uint64 = itxn[asset1_txn#0].OnCompletion + let asset1_txn.NumAppArgs#0: uint64 = itxn[asset1_txn#0].NumAppArgs + let asset1_txn.NumAccounts#0: uint64 = itxn[asset1_txn#0].NumAccounts + let asset1_txn.ApprovalProgram#0: bytes = itxn[asset1_txn#0].ApprovalProgram + let asset1_txn.ClearStateProgram#0: bytes = itxn[asset1_txn#0].ClearStateProgram + let asset1_txn.RekeyTo#0: bytes = itxn[asset1_txn#0].RekeyTo + let asset1_txn.ConfigAsset#0: uint64 = itxn[asset1_txn#0].ConfigAsset + let asset1_txn.ConfigAssetTotal#0: uint64 = itxn[asset1_txn#0].ConfigAssetTotal + let asset1_txn.ConfigAssetDecimals#0: uint64 = itxn[asset1_txn#0].ConfigAssetDecimals + let asset1_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset1_txn#0].ConfigAssetDefaultFrozen + let asset1_txn.ConfigAssetUnitName#0: bytes = itxn[asset1_txn#0].ConfigAssetUnitName + let asset1_txn.ConfigAssetName#0: bytes = itxn[asset1_txn#0].ConfigAssetName + let asset1_txn.ConfigAssetURL#0: bytes = itxn[asset1_txn#0].ConfigAssetURL + let asset1_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset1_txn#0].ConfigAssetMetadataHash + let asset1_txn.ConfigAssetManager#0: bytes = itxn[asset1_txn#0].ConfigAssetManager + let asset1_txn.ConfigAssetReserve#0: bytes = itxn[asset1_txn#0].ConfigAssetReserve + let asset1_txn.ConfigAssetFreeze#0: bytes = itxn[asset1_txn#0].ConfigAssetFreeze + let asset1_txn.ConfigAssetClawback#0: bytes = itxn[asset1_txn#0].ConfigAssetClawback + let asset1_txn.FreezeAsset#0: uint64 = itxn[asset1_txn#0].FreezeAsset + let asset1_txn.FreezeAssetAccount#0: bytes = itxn[asset1_txn#0].FreezeAssetAccount + let asset1_txn.FreezeAssetFrozen#0: bool = itxn[asset1_txn#0].FreezeAssetFrozen + let asset1_txn.NumAssets#0: uint64 = itxn[asset1_txn#0].NumAssets + let asset1_txn.NumApplications#0: uint64 = itxn[asset1_txn#0].NumApplications + let asset1_txn.GlobalNumUint#0: uint64 = itxn[asset1_txn#0].GlobalNumUint + let asset1_txn.GlobalNumByteSlice#0: uint64 = itxn[asset1_txn#0].GlobalNumByteSlice + let asset1_txn.LocalNumUint#0: uint64 = itxn[asset1_txn#0].LocalNumUint + let asset1_txn.LocalNumByteSlice#0: uint64 = itxn[asset1_txn#0].LocalNumByteSlice + let asset1_txn.ExtraProgramPages#0: uint64 = itxn[asset1_txn#0].ExtraProgramPages + let asset1_txn.Nonparticipation#0: bool = itxn[asset1_txn#0].Nonparticipation + let asset1_txn.NumLogs#0: uint64 = itxn[asset1_txn#0].NumLogs + let asset1_txn.CreatedAssetID#0: uint64 = itxn[asset1_txn#0].CreatedAssetID + let asset1_txn.CreatedApplicationID#0: uint64 = itxn[asset1_txn#0].CreatedApplicationID + let asset1_txn.LastLog#0: bytes = itxn[asset1_txn#0].LastLog + let asset1_txn.StateProofPK#0: bytes = itxn[asset1_txn#0].StateProofPK + let asset1_txn.NumApprovalProgramPages#0: uint64 = itxn[asset1_txn#0].NumApprovalProgramPages + let asset1_txn.NumClearStateProgramPages#0: uint64 = itxn[asset1_txn#0].NumClearStateProgramPages + let assetParams#1: itxn_field_set = itxn_field_set(1) + let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (app_global_get_ex 0u "name") + (assert maybe_exists%1#0) // check GlobalState exists + let assetParams%%param_ConfigAssetName_idx_0#1: bytes = maybe_value%1#0 + let assetParams%%ConfigAssetName_length#1: uint64 = 1u + itxn_begin + ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) + ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) + ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) + ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) + ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#1) + ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) + ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L44 + itxn_submit + let asset2_txn#0: itxn_group_idx = itxn_group_idx(0) + let asset2_txn._is_last#0: bool = 1u + let asset2_txn.Sender#0: bytes = itxn[asset2_txn#0].Sender + let asset2_txn.Fee#0: uint64 = itxn[asset2_txn#0].Fee + let asset2_txn.FirstValid#0: uint64 = itxn[asset2_txn#0].FirstValid + let asset2_txn.FirstValidTime#0: uint64 = itxn[asset2_txn#0].FirstValidTime + let asset2_txn.LastValid#0: uint64 = itxn[asset2_txn#0].LastValid + let asset2_txn.Note#0: bytes = itxn[asset2_txn#0].Note + let asset2_txn.Lease#0: bytes = itxn[asset2_txn#0].Lease + let asset2_txn.Receiver#0: bytes = itxn[asset2_txn#0].Receiver + let asset2_txn.Amount#0: uint64 = itxn[asset2_txn#0].Amount + let asset2_txn.CloseRemainderTo#0: bytes = itxn[asset2_txn#0].CloseRemainderTo + let asset2_txn.VotePK#0: bytes = itxn[asset2_txn#0].VotePK + let asset2_txn.SelectionPK#0: bytes = itxn[asset2_txn#0].SelectionPK + let asset2_txn.VoteFirst#0: uint64 = itxn[asset2_txn#0].VoteFirst + let asset2_txn.VoteLast#0: uint64 = itxn[asset2_txn#0].VoteLast + let asset2_txn.VoteKeyDilution#0: uint64 = itxn[asset2_txn#0].VoteKeyDilution + let asset2_txn.Type#0: bytes = itxn[asset2_txn#0].Type + let asset2_txn.TypeEnum#0: uint64 = itxn[asset2_txn#0].TypeEnum + let asset2_txn.XferAsset#0: uint64 = itxn[asset2_txn#0].XferAsset + let asset2_txn.AssetAmount#0: uint64 = itxn[asset2_txn#0].AssetAmount + let asset2_txn.AssetSender#0: bytes = itxn[asset2_txn#0].AssetSender + let asset2_txn.AssetReceiver#0: bytes = itxn[asset2_txn#0].AssetReceiver + let asset2_txn.AssetCloseTo#0: bytes = itxn[asset2_txn#0].AssetCloseTo + let asset2_txn.GroupIndex#0: uint64 = itxn[asset2_txn#0].GroupIndex + let asset2_txn.TxID#0: bytes = itxn[asset2_txn#0].TxID + let asset2_txn.ApplicationID#0: uint64 = itxn[asset2_txn#0].ApplicationID + let asset2_txn.OnCompletion#0: uint64 = itxn[asset2_txn#0].OnCompletion + let asset2_txn.NumAppArgs#0: uint64 = itxn[asset2_txn#0].NumAppArgs + let asset2_txn.NumAccounts#0: uint64 = itxn[asset2_txn#0].NumAccounts + let asset2_txn.ApprovalProgram#0: bytes = itxn[asset2_txn#0].ApprovalProgram + let asset2_txn.ClearStateProgram#0: bytes = itxn[asset2_txn#0].ClearStateProgram + let asset2_txn.RekeyTo#0: bytes = itxn[asset2_txn#0].RekeyTo + let asset2_txn.ConfigAsset#0: uint64 = itxn[asset2_txn#0].ConfigAsset + let asset2_txn.ConfigAssetTotal#0: uint64 = itxn[asset2_txn#0].ConfigAssetTotal + let asset2_txn.ConfigAssetDecimals#0: uint64 = itxn[asset2_txn#0].ConfigAssetDecimals + let asset2_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset2_txn#0].ConfigAssetDefaultFrozen + let asset2_txn.ConfigAssetUnitName#0: bytes = itxn[asset2_txn#0].ConfigAssetUnitName + let asset2_txn.ConfigAssetName#0: bytes = itxn[asset2_txn#0].ConfigAssetName + let asset2_txn.ConfigAssetURL#0: bytes = itxn[asset2_txn#0].ConfigAssetURL + let asset2_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset2_txn#0].ConfigAssetMetadataHash + let asset2_txn.ConfigAssetManager#0: bytes = itxn[asset2_txn#0].ConfigAssetManager + let asset2_txn.ConfigAssetReserve#0: bytes = itxn[asset2_txn#0].ConfigAssetReserve + let asset2_txn.ConfigAssetFreeze#0: bytes = itxn[asset2_txn#0].ConfigAssetFreeze + let asset2_txn.ConfigAssetClawback#0: bytes = itxn[asset2_txn#0].ConfigAssetClawback + let asset2_txn.FreezeAsset#0: uint64 = itxn[asset2_txn#0].FreezeAsset + let asset2_txn.FreezeAssetAccount#0: bytes = itxn[asset2_txn#0].FreezeAssetAccount + let asset2_txn.FreezeAssetFrozen#0: bool = itxn[asset2_txn#0].FreezeAssetFrozen + let asset2_txn.NumAssets#0: uint64 = itxn[asset2_txn#0].NumAssets + let asset2_txn.NumApplications#0: uint64 = itxn[asset2_txn#0].NumApplications + let asset2_txn.GlobalNumUint#0: uint64 = itxn[asset2_txn#0].GlobalNumUint + let asset2_txn.GlobalNumByteSlice#0: uint64 = itxn[asset2_txn#0].GlobalNumByteSlice + let asset2_txn.LocalNumUint#0: uint64 = itxn[asset2_txn#0].LocalNumUint + let asset2_txn.LocalNumByteSlice#0: uint64 = itxn[asset2_txn#0].LocalNumByteSlice + let asset2_txn.ExtraProgramPages#0: uint64 = itxn[asset2_txn#0].ExtraProgramPages + let asset2_txn.Nonparticipation#0: bool = itxn[asset2_txn#0].Nonparticipation + let asset2_txn.NumLogs#0: uint64 = itxn[asset2_txn#0].NumLogs + let asset2_txn.CreatedAssetID#0: uint64 = itxn[asset2_txn#0].CreatedAssetID + let asset2_txn.CreatedApplicationID#0: uint64 = itxn[asset2_txn#0].CreatedApplicationID + let asset2_txn.LastLog#0: bytes = itxn[asset2_txn#0].LastLog + let asset2_txn.StateProofPK#0: bytes = itxn[asset2_txn#0].StateProofPK + let asset2_txn.NumApprovalProgramPages#0: uint64 = itxn[asset2_txn#0].NumApprovalProgramPages + let asset2_txn.NumClearStateProgramPages#0: uint64 = itxn[asset2_txn#0].NumClearStateProgramPages + let tmp%0#0: bool = (== asset1_txn.ConfigAssetName#0 "AST1") + (assert tmp%0#0) // asset1_txn is correct + let tmp%1#0: bool = (== asset2_txn.ConfigAssetName#0 "AST2") + (assert tmp%1#0) // asset2_txn is correct + let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset1_txn.CreatedAssetID#0) + (assert check%0#0) // asset exists + let tmp%2#0: bool = (== value%0#0 "AST1") + (assert tmp%2#0) // created asset 1 is correct + let (value%1#0: bytes, check%1#0: bool) = ((asset_params_get AssetName) asset2_txn.CreatedAssetID#0) + (assert check%1#0) // asset exists + let tmp%3#0: bool = (== value%1#0 "AST2") + (assert tmp%3#0) // created asset 2 is correct + let appCreateParams#0: itxn_field_set = itxn_field_set(2) + let appCreateParams%%param_Fee_idx_0#0: uint64 = 0u + let appCreateParams%%Fee_length#0: uint64 = 1u + let appCreateParams%%param_TypeEnum_idx_0#0: uint64 = 6u + let appCreateParams%%TypeEnum_length#0: uint64 = 1u + let appCreateParams%%param_ApprovalProgramPages_idx_0#0: bytes = 0x098101 + let appCreateParams%%ApprovalProgramPages_length#0: uint64 = 1u + let appCreateParams%%param_ClearStateProgramPages_idx_0#0: bytes = 0x098101 + let appCreateParams%%ClearStateProgramPages_length#0: uint64 = 1u + let appCreateParams%%Sender_length#0: uint64 = 0u + let appCreateParams%%Note_length#0: uint64 = 0u + let appCreateParams%%Receiver_length#0: uint64 = 0u + let appCreateParams%%Amount_length#0: uint64 = 0u + let appCreateParams%%CloseRemainderTo_length#0: uint64 = 0u + let appCreateParams%%VotePK_length#0: uint64 = 0u + let appCreateParams%%SelectionPK_length#0: uint64 = 0u + let appCreateParams%%VoteFirst_length#0: uint64 = 0u + let appCreateParams%%VoteLast_length#0: uint64 = 0u + let appCreateParams%%VoteKeyDilution_length#0: uint64 = 0u + let appCreateParams%%Type_length#0: uint64 = 0u + let appCreateParams%%XferAsset_length#0: uint64 = 0u + let appCreateParams%%AssetAmount_length#0: uint64 = 0u + let appCreateParams%%AssetSender_length#0: uint64 = 0u + let appCreateParams%%AssetReceiver_length#0: uint64 = 0u + let appCreateParams%%AssetCloseTo_length#0: uint64 = 0u + let appCreateParams%%ApplicationID_length#0: uint64 = 0u + let appCreateParams%%OnCompletion_length#0: uint64 = 0u + let appCreateParams%%ApprovalProgram_length#0: uint64 = 0u + let appCreateParams%%ClearStateProgram_length#0: uint64 = 0u + let appCreateParams%%RekeyTo_length#0: uint64 = 0u + let appCreateParams%%ConfigAsset_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetTotal_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetDecimals_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetUnitName_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetName_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetURL_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetManager_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetReserve_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetFreeze_length#0: uint64 = 0u + let appCreateParams%%ConfigAssetClawback_length#0: uint64 = 0u + let appCreateParams%%FreezeAsset_length#0: uint64 = 0u + let appCreateParams%%FreezeAssetAccount_length#0: uint64 = 0u + let appCreateParams%%FreezeAssetFrozen_length#0: uint64 = 0u + let appCreateParams%%GlobalNumUint_length#0: uint64 = 0u + let appCreateParams%%GlobalNumByteSlice_length#0: uint64 = 0u + let appCreateParams%%LocalNumUint_length#0: uint64 = 0u + let appCreateParams%%LocalNumByteSlice_length#0: uint64 = 0u + let appCreateParams%%ExtraProgramPages_length#0: uint64 = 0u + let appCreateParams%%Nonparticipation_length#0: uint64 = 0u + let appCreateParams%%StateProofPK_length#0: uint64 = 0u + let appCreateParams%%ApplicationArgs_length#0: uint64 = 0u + let appCreateParams%%Accounts_length#0: uint64 = 0u + let appCreateParams%%Assets_length#0: uint64 = 0u + let appCreateParams%%Applications_length#0: uint64 = 0u + let assetParams#2: itxn_field_set = itxn_field_set(3) + let assetParams%%param_ConfigAssetName_idx_0#2: bytes = "AST3" + let assetParams%%ConfigAssetName_length#2: uint64 = 1u + itxn_begin + ((itxn_field ClearStateProgramPages) appCreateParams%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) appCreateParams%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field TypeEnum) appCreateParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) appCreateParams%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L61 + itxn_next + ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) + ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) + ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) + ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) + ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#2) + ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) + ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) + goto block@4 + block@4: // next_txn_L61 + itxn_submit + let appCreateTxn#0: itxn_group_idx = itxn_group_idx(0) + let asset3_txn#0: itxn_group_idx = itxn_group_idx(1) + let appCreateTxn._is_last#0: bool = 0u + let appCreateTxn.Sender#0: bytes = itxn[appCreateTxn#0].Sender + let appCreateTxn.Fee#0: uint64 = itxn[appCreateTxn#0].Fee + let appCreateTxn.FirstValid#0: uint64 = itxn[appCreateTxn#0].FirstValid + let appCreateTxn.FirstValidTime#0: uint64 = itxn[appCreateTxn#0].FirstValidTime + let appCreateTxn.LastValid#0: uint64 = itxn[appCreateTxn#0].LastValid + let appCreateTxn.Note#0: bytes = itxn[appCreateTxn#0].Note + let appCreateTxn.Lease#0: bytes = itxn[appCreateTxn#0].Lease + let appCreateTxn.Receiver#0: bytes = itxn[appCreateTxn#0].Receiver + let appCreateTxn.Amount#0: uint64 = itxn[appCreateTxn#0].Amount + let appCreateTxn.CloseRemainderTo#0: bytes = itxn[appCreateTxn#0].CloseRemainderTo + let appCreateTxn.VotePK#0: bytes = itxn[appCreateTxn#0].VotePK + let appCreateTxn.SelectionPK#0: bytes = itxn[appCreateTxn#0].SelectionPK + let appCreateTxn.VoteFirst#0: uint64 = itxn[appCreateTxn#0].VoteFirst + let appCreateTxn.VoteLast#0: uint64 = itxn[appCreateTxn#0].VoteLast + let appCreateTxn.VoteKeyDilution#0: uint64 = itxn[appCreateTxn#0].VoteKeyDilution + let appCreateTxn.Type#0: bytes = itxn[appCreateTxn#0].Type + let appCreateTxn.TypeEnum#0: uint64 = itxn[appCreateTxn#0].TypeEnum + let appCreateTxn.XferAsset#0: uint64 = itxn[appCreateTxn#0].XferAsset + let appCreateTxn.AssetAmount#0: uint64 = itxn[appCreateTxn#0].AssetAmount + let appCreateTxn.AssetSender#0: bytes = itxn[appCreateTxn#0].AssetSender + let appCreateTxn.AssetReceiver#0: bytes = itxn[appCreateTxn#0].AssetReceiver + let appCreateTxn.AssetCloseTo#0: bytes = itxn[appCreateTxn#0].AssetCloseTo + let appCreateTxn.GroupIndex#0: uint64 = itxn[appCreateTxn#0].GroupIndex + let appCreateTxn.TxID#0: bytes = itxn[appCreateTxn#0].TxID + let appCreateTxn.ApplicationID#0: uint64 = itxn[appCreateTxn#0].ApplicationID + let appCreateTxn.OnCompletion#0: uint64 = itxn[appCreateTxn#0].OnCompletion + let appCreateTxn.NumAppArgs#0: uint64 = itxn[appCreateTxn#0].NumAppArgs + let appCreateTxn.NumAccounts#0: uint64 = itxn[appCreateTxn#0].NumAccounts + let appCreateTxn.ApprovalProgram#0: bytes = itxn[appCreateTxn#0].ApprovalProgram + let appCreateTxn.ClearStateProgram#0: bytes = itxn[appCreateTxn#0].ClearStateProgram + let appCreateTxn.RekeyTo#0: bytes = itxn[appCreateTxn#0].RekeyTo + let appCreateTxn.ConfigAsset#0: uint64 = itxn[appCreateTxn#0].ConfigAsset + let appCreateTxn.ConfigAssetTotal#0: uint64 = itxn[appCreateTxn#0].ConfigAssetTotal + let appCreateTxn.ConfigAssetDecimals#0: uint64 = itxn[appCreateTxn#0].ConfigAssetDecimals + let appCreateTxn.ConfigAssetDefaultFrozen#0: bool = itxn[appCreateTxn#0].ConfigAssetDefaultFrozen + let appCreateTxn.ConfigAssetUnitName#0: bytes = itxn[appCreateTxn#0].ConfigAssetUnitName + let appCreateTxn.ConfigAssetName#0: bytes = itxn[appCreateTxn#0].ConfigAssetName + let appCreateTxn.ConfigAssetURL#0: bytes = itxn[appCreateTxn#0].ConfigAssetURL + let appCreateTxn.ConfigAssetMetadataHash#0: bytes = itxn[appCreateTxn#0].ConfigAssetMetadataHash + let appCreateTxn.ConfigAssetManager#0: bytes = itxn[appCreateTxn#0].ConfigAssetManager + let appCreateTxn.ConfigAssetReserve#0: bytes = itxn[appCreateTxn#0].ConfigAssetReserve + let appCreateTxn.ConfigAssetFreeze#0: bytes = itxn[appCreateTxn#0].ConfigAssetFreeze + let appCreateTxn.ConfigAssetClawback#0: bytes = itxn[appCreateTxn#0].ConfigAssetClawback + let appCreateTxn.FreezeAsset#0: uint64 = itxn[appCreateTxn#0].FreezeAsset + let appCreateTxn.FreezeAssetAccount#0: bytes = itxn[appCreateTxn#0].FreezeAssetAccount + let appCreateTxn.FreezeAssetFrozen#0: bool = itxn[appCreateTxn#0].FreezeAssetFrozen + let appCreateTxn.NumAssets#0: uint64 = itxn[appCreateTxn#0].NumAssets + let appCreateTxn.NumApplications#0: uint64 = itxn[appCreateTxn#0].NumApplications + let appCreateTxn.GlobalNumUint#0: uint64 = itxn[appCreateTxn#0].GlobalNumUint + let appCreateTxn.GlobalNumByteSlice#0: uint64 = itxn[appCreateTxn#0].GlobalNumByteSlice + let appCreateTxn.LocalNumUint#0: uint64 = itxn[appCreateTxn#0].LocalNumUint + let appCreateTxn.LocalNumByteSlice#0: uint64 = itxn[appCreateTxn#0].LocalNumByteSlice + let appCreateTxn.ExtraProgramPages#0: uint64 = itxn[appCreateTxn#0].ExtraProgramPages + let appCreateTxn.Nonparticipation#0: bool = itxn[appCreateTxn#0].Nonparticipation + let appCreateTxn.NumLogs#0: uint64 = itxn[appCreateTxn#0].NumLogs + let appCreateTxn.CreatedAssetID#0: uint64 = itxn[appCreateTxn#0].CreatedAssetID + let appCreateTxn.CreatedApplicationID#0: uint64 = itxn[appCreateTxn#0].CreatedApplicationID + let appCreateTxn.LastLog#0: bytes = itxn[appCreateTxn#0].LastLog + let appCreateTxn.StateProofPK#0: bytes = itxn[appCreateTxn#0].StateProofPK + let appCreateTxn.NumApprovalProgramPages#0: uint64 = itxn[appCreateTxn#0].NumApprovalProgramPages + let appCreateTxn.NumClearStateProgramPages#0: uint64 = itxn[appCreateTxn#0].NumClearStateProgramPages + let asset3_txn._is_last#0: bool = 1u + let asset3_txn.Sender#0: bytes = itxn[asset3_txn#0].Sender + let asset3_txn.Fee#0: uint64 = itxn[asset3_txn#0].Fee + let asset3_txn.FirstValid#0: uint64 = itxn[asset3_txn#0].FirstValid + let asset3_txn.FirstValidTime#0: uint64 = itxn[asset3_txn#0].FirstValidTime + let asset3_txn.LastValid#0: uint64 = itxn[asset3_txn#0].LastValid + let asset3_txn.Note#0: bytes = itxn[asset3_txn#0].Note + let asset3_txn.Lease#0: bytes = itxn[asset3_txn#0].Lease + let asset3_txn.Receiver#0: bytes = itxn[asset3_txn#0].Receiver + let asset3_txn.Amount#0: uint64 = itxn[asset3_txn#0].Amount + let asset3_txn.CloseRemainderTo#0: bytes = itxn[asset3_txn#0].CloseRemainderTo + let asset3_txn.VotePK#0: bytes = itxn[asset3_txn#0].VotePK + let asset3_txn.SelectionPK#0: bytes = itxn[asset3_txn#0].SelectionPK + let asset3_txn.VoteFirst#0: uint64 = itxn[asset3_txn#0].VoteFirst + let asset3_txn.VoteLast#0: uint64 = itxn[asset3_txn#0].VoteLast + let asset3_txn.VoteKeyDilution#0: uint64 = itxn[asset3_txn#0].VoteKeyDilution + let asset3_txn.Type#0: bytes = itxn[asset3_txn#0].Type + let asset3_txn.TypeEnum#0: uint64 = itxn[asset3_txn#0].TypeEnum + let asset3_txn.XferAsset#0: uint64 = itxn[asset3_txn#0].XferAsset + let asset3_txn.AssetAmount#0: uint64 = itxn[asset3_txn#0].AssetAmount + let asset3_txn.AssetSender#0: bytes = itxn[asset3_txn#0].AssetSender + let asset3_txn.AssetReceiver#0: bytes = itxn[asset3_txn#0].AssetReceiver + let asset3_txn.AssetCloseTo#0: bytes = itxn[asset3_txn#0].AssetCloseTo + let asset3_txn.GroupIndex#0: uint64 = itxn[asset3_txn#0].GroupIndex + let asset3_txn.TxID#0: bytes = itxn[asset3_txn#0].TxID + let asset3_txn.ApplicationID#0: uint64 = itxn[asset3_txn#0].ApplicationID + let asset3_txn.OnCompletion#0: uint64 = itxn[asset3_txn#0].OnCompletion + let asset3_txn.NumAppArgs#0: uint64 = itxn[asset3_txn#0].NumAppArgs + let asset3_txn.NumAccounts#0: uint64 = itxn[asset3_txn#0].NumAccounts + let asset3_txn.ApprovalProgram#0: bytes = itxn[asset3_txn#0].ApprovalProgram + let asset3_txn.ClearStateProgram#0: bytes = itxn[asset3_txn#0].ClearStateProgram + let asset3_txn.RekeyTo#0: bytes = itxn[asset3_txn#0].RekeyTo + let asset3_txn.ConfigAsset#0: uint64 = itxn[asset3_txn#0].ConfigAsset + let asset3_txn.ConfigAssetTotal#0: uint64 = itxn[asset3_txn#0].ConfigAssetTotal + let asset3_txn.ConfigAssetDecimals#0: uint64 = itxn[asset3_txn#0].ConfigAssetDecimals + let asset3_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset3_txn#0].ConfigAssetDefaultFrozen + let asset3_txn.ConfigAssetUnitName#0: bytes = itxn[asset3_txn#0].ConfigAssetUnitName + let asset3_txn.ConfigAssetName#0: bytes = itxn[asset3_txn#0].ConfigAssetName + let asset3_txn.ConfigAssetURL#0: bytes = itxn[asset3_txn#0].ConfigAssetURL + let asset3_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset3_txn#0].ConfigAssetMetadataHash + let asset3_txn.ConfigAssetManager#0: bytes = itxn[asset3_txn#0].ConfigAssetManager + let asset3_txn.ConfigAssetReserve#0: bytes = itxn[asset3_txn#0].ConfigAssetReserve + let asset3_txn.ConfigAssetFreeze#0: bytes = itxn[asset3_txn#0].ConfigAssetFreeze + let asset3_txn.ConfigAssetClawback#0: bytes = itxn[asset3_txn#0].ConfigAssetClawback + let asset3_txn.FreezeAsset#0: uint64 = itxn[asset3_txn#0].FreezeAsset + let asset3_txn.FreezeAssetAccount#0: bytes = itxn[asset3_txn#0].FreezeAssetAccount + let asset3_txn.FreezeAssetFrozen#0: bool = itxn[asset3_txn#0].FreezeAssetFrozen + let asset3_txn.NumAssets#0: uint64 = itxn[asset3_txn#0].NumAssets + let asset3_txn.NumApplications#0: uint64 = itxn[asset3_txn#0].NumApplications + let asset3_txn.GlobalNumUint#0: uint64 = itxn[asset3_txn#0].GlobalNumUint + let asset3_txn.GlobalNumByteSlice#0: uint64 = itxn[asset3_txn#0].GlobalNumByteSlice + let asset3_txn.LocalNumUint#0: uint64 = itxn[asset3_txn#0].LocalNumUint + let asset3_txn.LocalNumByteSlice#0: uint64 = itxn[asset3_txn#0].LocalNumByteSlice + let asset3_txn.ExtraProgramPages#0: uint64 = itxn[asset3_txn#0].ExtraProgramPages + let asset3_txn.Nonparticipation#0: bool = itxn[asset3_txn#0].Nonparticipation + let asset3_txn.NumLogs#0: uint64 = itxn[asset3_txn#0].NumLogs + let asset3_txn.CreatedAssetID#0: uint64 = itxn[asset3_txn#0].CreatedAssetID + let asset3_txn.CreatedApplicationID#0: uint64 = itxn[asset3_txn#0].CreatedApplicationID + let asset3_txn.LastLog#0: bytes = itxn[asset3_txn#0].LastLog + let asset3_txn.StateProofPK#0: bytes = itxn[asset3_txn#0].StateProofPK + let asset3_txn.NumApprovalProgramPages#0: uint64 = itxn[asset3_txn#0].NumApprovalProgramPages + let asset3_txn.NumClearStateProgramPages#0: uint64 = itxn[asset3_txn#0].NumClearStateProgramPages + let reinterpret_bool%0#0: bool = appCreateTxn.ApplicationID#0 + (assert reinterpret_bool%0#0) // app is created + let tmp%4#0: bool = (== asset3_txn.ConfigAssetName#0 "AST3") + (assert tmp%4#0) // asset3_txn is correct + let appCreateParams#1: itxn_field_set = itxn_field_set(4) + let appCreateParams%%param_Note_idx_0#0: bytes = "3rd" + let appCreateParams%%Note_length#1: uint64 = 1u + let assetParams#3: itxn_field_set = itxn_field_set(5) + let assetParams%%param_Note_idx_0#0: bytes = "3rd" + let assetParams%%Note_length#1: uint64 = 1u + itxn_begin + let is_Note_count_gte_1%0#0: bool = (>= appCreateParams%%Note_length#1 1u) + goto is_Note_count_gte_1%0#0 ? block@5 : block@6 + block@5: // set_Note_0_to_0_L72 + ((itxn_field Note) appCreateParams%%param_Note_idx_0#0) + goto block@6 + block@6: // next_field_L72 + ((itxn_field ClearStateProgramPages) appCreateParams%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) appCreateParams%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field TypeEnum) appCreateParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) appCreateParams%%param_Fee_idx_0#0) + goto block@7 + block@7: // next_txn_L72 + itxn_next + let is_Note_count_gte_1%1#0: bool = (>= assetParams%%Note_length#1 1u) + goto is_Note_count_gte_1%1#0 ? block@8 : block@9 + block@8: // set_Note_0_to_0_L72 + ((itxn_field Note) assetParams%%param_Note_idx_0#0) + goto block@9 + block@9: // next_field_L72 + ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) + ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) + ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) + ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) + ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#2) + ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) + ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) + goto block@10 + block@10: // next_txn_L72 + itxn_submit + return + +subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test2() -> void: + block@0: // L75 + let createAppParams%%param_OnCompletion_idx_0#2: uint64 = undefined + let createAppParams%%param_ApplicationArgs_idx_2#3: bytes = undefined + let reinterpret_bool%0#0: bool = (txn NumAppArgs) + goto reinterpret_bool%0#0 ? block@1 : block@2 + block@1: // if_body_L77 + let (args.0#0: bytes, args.1#0: bytes) = ("1", "2") + let createAppParams#0: itxn_field_set = itxn_field_set(0) + let createAppParams%%param_Fee_idx_0#0: uint64 = 0u + let createAppParams%%Fee_length#0: uint64 = 1u + let createAppParams%%param_TypeEnum_idx_0#0: uint64 = 6u + let createAppParams%%TypeEnum_length#0: uint64 = 1u + let createAppParams%%param_ApprovalProgramPages_idx_0#0: bytes = "\t\xc2\x81\x01" + let createAppParams%%ApprovalProgramPages_length#0: uint64 = 1u + let createAppParams%%param_ClearStateProgramPages_idx_0#0: bytes = "\t\xc2\x81\x01" + let createAppParams%%ClearStateProgramPages_length#0: uint64 = 1u + let createAppParams%%param_ApplicationArgs_idx_0#0: bytes = args.0#0 + let createAppParams%%param_ApplicationArgs_idx_1#0: bytes = args.1#0 + let createAppParams%%ApplicationArgs_length#0: uint64 = 2u + let createAppParams%%param_OnCompletion_idx_0#0: uint64 = 0u + let createAppParams%%OnCompletion_length#0: uint64 = 1u + let createAppParams%%param_Note_idx_0#0: bytes = "with args param set" + let createAppParams%%Note_length#0: uint64 = 1u + let createAppParams%%Sender_length#0: uint64 = 0u + let createAppParams%%Receiver_length#0: uint64 = 0u + let createAppParams%%Amount_length#0: uint64 = 0u + let createAppParams%%CloseRemainderTo_length#0: uint64 = 0u + let createAppParams%%VotePK_length#0: uint64 = 0u + let createAppParams%%SelectionPK_length#0: uint64 = 0u + let createAppParams%%VoteFirst_length#0: uint64 = 0u + let createAppParams%%VoteLast_length#0: uint64 = 0u + let createAppParams%%VoteKeyDilution_length#0: uint64 = 0u + let createAppParams%%Type_length#0: uint64 = 0u + let createAppParams%%XferAsset_length#0: uint64 = 0u + let createAppParams%%AssetAmount_length#0: uint64 = 0u + let createAppParams%%AssetSender_length#0: uint64 = 0u + let createAppParams%%AssetReceiver_length#0: uint64 = 0u + let createAppParams%%AssetCloseTo_length#0: uint64 = 0u + let createAppParams%%ApplicationID_length#0: uint64 = 0u + let createAppParams%%ApprovalProgram_length#0: uint64 = 0u + let createAppParams%%ClearStateProgram_length#0: uint64 = 0u + let createAppParams%%RekeyTo_length#0: uint64 = 0u + let createAppParams%%ConfigAsset_length#0: uint64 = 0u + let createAppParams%%ConfigAssetTotal_length#0: uint64 = 0u + let createAppParams%%ConfigAssetDecimals_length#0: uint64 = 0u + let createAppParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let createAppParams%%ConfigAssetUnitName_length#0: uint64 = 0u + let createAppParams%%ConfigAssetName_length#0: uint64 = 0u + let createAppParams%%ConfigAssetURL_length#0: uint64 = 0u + let createAppParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let createAppParams%%ConfigAssetManager_length#0: uint64 = 0u + let createAppParams%%ConfigAssetReserve_length#0: uint64 = 0u + let createAppParams%%ConfigAssetFreeze_length#0: uint64 = 0u + let createAppParams%%ConfigAssetClawback_length#0: uint64 = 0u + let createAppParams%%FreezeAsset_length#0: uint64 = 0u + let createAppParams%%FreezeAssetAccount_length#0: uint64 = 0u + let createAppParams%%FreezeAssetFrozen_length#0: uint64 = 0u + let createAppParams%%GlobalNumUint_length#0: uint64 = 0u + let createAppParams%%GlobalNumByteSlice_length#0: uint64 = 0u + let createAppParams%%LocalNumUint_length#0: uint64 = 0u + let createAppParams%%LocalNumByteSlice_length#0: uint64 = 0u + let createAppParams%%ExtraProgramPages_length#0: uint64 = 0u + let createAppParams%%Nonparticipation_length#0: uint64 = 0u + let createAppParams%%StateProofPK_length#0: uint64 = 0u + let createAppParams%%Accounts_length#0: uint64 = 0u + let createAppParams%%Assets_length#0: uint64 = 0u + let createAppParams%%Applications_length#0: uint64 = 0u + goto block@3 + block@2: // else_body_L86 + let createAppParams#1: itxn_field_set = itxn_field_set(1) + let createAppParams%%param_Fee_idx_0#1: uint64 = 0u + let createAppParams%%Fee_length#1: uint64 = 1u + let createAppParams%%param_TypeEnum_idx_0#1: uint64 = 6u + let createAppParams%%TypeEnum_length#1: uint64 = 1u + let createAppParams%%param_ApprovalProgramPages_idx_0#1: bytes = "\t\xc2\x81\x01" + let createAppParams%%ApprovalProgramPages_length#1: uint64 = 1u + let createAppParams%%param_ClearStateProgramPages_idx_0#1: bytes = "\t\xc2\x81\x01" + let createAppParams%%ClearStateProgramPages_length#1: uint64 = 1u + let createAppParams%%param_ApplicationArgs_idx_0#1: bytes = "3" + let createAppParams%%param_ApplicationArgs_idx_1#1: bytes = "4" + let createAppParams%%param_ApplicationArgs_idx_2#0: bytes = "5" + let createAppParams%%ApplicationArgs_length#1: uint64 = 3u + let createAppParams%%param_Note_idx_0#1: bytes = "no args param set" + let createAppParams%%Note_length#1: uint64 = 1u + let createAppParams%%Sender_length#1: uint64 = 0u + let createAppParams%%Receiver_length#1: uint64 = 0u + let createAppParams%%Amount_length#1: uint64 = 0u + let createAppParams%%CloseRemainderTo_length#1: uint64 = 0u + let createAppParams%%VotePK_length#1: uint64 = 0u + let createAppParams%%SelectionPK_length#1: uint64 = 0u + let createAppParams%%VoteFirst_length#1: uint64 = 0u + let createAppParams%%VoteLast_length#1: uint64 = 0u + let createAppParams%%VoteKeyDilution_length#1: uint64 = 0u + let createAppParams%%Type_length#1: uint64 = 0u + let createAppParams%%XferAsset_length#1: uint64 = 0u + let createAppParams%%AssetAmount_length#1: uint64 = 0u + let createAppParams%%AssetSender_length#1: uint64 = 0u + let createAppParams%%AssetReceiver_length#1: uint64 = 0u + let createAppParams%%AssetCloseTo_length#1: uint64 = 0u + let createAppParams%%ApplicationID_length#1: uint64 = 0u + let createAppParams%%OnCompletion_length#1: uint64 = 0u + let createAppParams%%ApprovalProgram_length#1: uint64 = 0u + let createAppParams%%ClearStateProgram_length#1: uint64 = 0u + let createAppParams%%RekeyTo_length#1: uint64 = 0u + let createAppParams%%ConfigAsset_length#1: uint64 = 0u + let createAppParams%%ConfigAssetTotal_length#1: uint64 = 0u + let createAppParams%%ConfigAssetDecimals_length#1: uint64 = 0u + let createAppParams%%ConfigAssetDefaultFrozen_length#1: uint64 = 0u + let createAppParams%%ConfigAssetUnitName_length#1: uint64 = 0u + let createAppParams%%ConfigAssetName_length#1: uint64 = 0u + let createAppParams%%ConfigAssetURL_length#1: uint64 = 0u + let createAppParams%%ConfigAssetMetadataHash_length#1: uint64 = 0u + let createAppParams%%ConfigAssetManager_length#1: uint64 = 0u + let createAppParams%%ConfigAssetReserve_length#1: uint64 = 0u + let createAppParams%%ConfigAssetFreeze_length#1: uint64 = 0u + let createAppParams%%ConfigAssetClawback_length#1: uint64 = 0u + let createAppParams%%FreezeAsset_length#1: uint64 = 0u + let createAppParams%%FreezeAssetAccount_length#1: uint64 = 0u + let createAppParams%%FreezeAssetFrozen_length#1: uint64 = 0u + let createAppParams%%GlobalNumUint_length#1: uint64 = 0u + let createAppParams%%GlobalNumByteSlice_length#1: uint64 = 0u + let createAppParams%%LocalNumUint_length#1: uint64 = 0u + let createAppParams%%LocalNumByteSlice_length#1: uint64 = 0u + let createAppParams%%ExtraProgramPages_length#1: uint64 = 0u + let createAppParams%%Nonparticipation_length#1: uint64 = 0u + let createAppParams%%StateProofPK_length#1: uint64 = 0u + let createAppParams%%Accounts_length#1: uint64 = 0u + let createAppParams%%Assets_length#1: uint64 = 0u + let createAppParams%%Applications_length#1: uint64 = 0u + goto block@3 + block@3: // after_if_else_L77 + let createAppParams%%param_Note_idx_0#2: bytes = φ(createAppParams%%param_Note_idx_0#0 <- block@1, createAppParams%%param_Note_idx_0#1 <- block@2) + let createAppParams%%OnCompletion_length#2: uint64 = φ(createAppParams%%OnCompletion_length#0 <- block@1, createAppParams%%OnCompletion_length#1 <- block@2) + let createAppParams%%param_OnCompletion_idx_0#1: uint64 = φ(createAppParams%%param_OnCompletion_idx_0#0 <- block@1, createAppParams%%param_OnCompletion_idx_0#2 <- block@2) + let createAppParams%%param_ApplicationArgs_idx_0#3: bytes = φ(createAppParams%%param_ApplicationArgs_idx_0#0 <- block@1, createAppParams%%param_ApplicationArgs_idx_0#1 <- block@2) + let createAppParams%%param_ApplicationArgs_idx_1#3: bytes = φ(createAppParams%%param_ApplicationArgs_idx_1#0 <- block@1, createAppParams%%param_ApplicationArgs_idx_1#1 <- block@2) + let createAppParams%%ApplicationArgs_length#3: uint64 = φ(createAppParams%%ApplicationArgs_length#0 <- block@1, createAppParams%%ApplicationArgs_length#1 <- block@2) + let createAppParams%%param_ApplicationArgs_idx_2#2: bytes = φ(createAppParams%%param_ApplicationArgs_idx_2#3 <- block@1, createAppParams%%param_ApplicationArgs_idx_2#0 <- block@2) + let createAppParams%%param_ClearStateProgramPages_idx_0#4: bytes = φ(createAppParams%%param_ClearStateProgramPages_idx_0#0 <- block@1, createAppParams%%param_ClearStateProgramPages_idx_0#1 <- block@2) + let createAppParams%%param_ApprovalProgramPages_idx_0#4: bytes = φ(createAppParams%%param_ApprovalProgramPages_idx_0#0 <- block@1, createAppParams%%param_ApprovalProgramPages_idx_0#1 <- block@2) + let createAppParams%%param_TypeEnum_idx_0#4: uint64 = φ(createAppParams%%param_TypeEnum_idx_0#0 <- block@1, createAppParams%%param_TypeEnum_idx_0#1 <- block@2) + let createAppParams%%param_Fee_idx_0#4: uint64 = φ(createAppParams%%param_Fee_idx_0#0 <- block@1, createAppParams%%param_Fee_idx_0#1 <- block@2) + itxn_begin + ((itxn_field Note) createAppParams%%param_Note_idx_0#2) + let is_OnCompletion_count_gte_1%0#0: bool = (>= createAppParams%%OnCompletion_length#2 1u) + goto is_OnCompletion_count_gte_1%0#0 ? block@4 : block@5 + block@4: // set_OnCompletion_0_to_0_L94 + ((itxn_field OnCompletion) createAppParams%%param_OnCompletion_idx_0#1) + goto block@5 + block@5: // next_field_L94 + ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_0#3) + ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_1#3) + let is_ApplicationArgs_count_gte_3%0#0: bool = (>= createAppParams%%ApplicationArgs_length#3 3u) + goto is_ApplicationArgs_count_gte_3%0#0 ? block@6 : block@7 + block@6: // set_ApplicationArgs_2_to_2_L94 + ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_2#2) + goto block@7 + block@7: // next_field_L94 + ((itxn_field ClearStateProgramPages) createAppParams%%param_ClearStateProgramPages_idx_0#4) + ((itxn_field ApprovalProgramPages) createAppParams%%param_ApprovalProgramPages_idx_0#4) + ((itxn_field TypeEnum) createAppParams%%param_TypeEnum_idx_0#4) + ((itxn_field Fee) createAppParams%%param_Fee_idx_0#4) + goto block@8 + block@8: // next_txn_L94 + itxn_submit + let createAppTxn#0: itxn_group_idx = itxn_group_idx(0) + let createAppTxn._is_last#0: bool = 1u + let createAppTxn.Sender#0: bytes = itxn[createAppTxn#0].Sender + let createAppTxn.Fee#0: uint64 = itxn[createAppTxn#0].Fee + let createAppTxn.FirstValid#0: uint64 = itxn[createAppTxn#0].FirstValid + let createAppTxn.FirstValidTime#0: uint64 = itxn[createAppTxn#0].FirstValidTime + let createAppTxn.LastValid#0: uint64 = itxn[createAppTxn#0].LastValid + let createAppTxn.Note#0: bytes = itxn[createAppTxn#0].Note + let createAppTxn.Lease#0: bytes = itxn[createAppTxn#0].Lease + let createAppTxn.Receiver#0: bytes = itxn[createAppTxn#0].Receiver + let createAppTxn.Amount#0: uint64 = itxn[createAppTxn#0].Amount + let createAppTxn.CloseRemainderTo#0: bytes = itxn[createAppTxn#0].CloseRemainderTo + let createAppTxn.VotePK#0: bytes = itxn[createAppTxn#0].VotePK + let createAppTxn.SelectionPK#0: bytes = itxn[createAppTxn#0].SelectionPK + let createAppTxn.VoteFirst#0: uint64 = itxn[createAppTxn#0].VoteFirst + let createAppTxn.VoteLast#0: uint64 = itxn[createAppTxn#0].VoteLast + let createAppTxn.VoteKeyDilution#0: uint64 = itxn[createAppTxn#0].VoteKeyDilution + let createAppTxn.Type#0: bytes = itxn[createAppTxn#0].Type + let createAppTxn.TypeEnum#0: uint64 = itxn[createAppTxn#0].TypeEnum + let createAppTxn.XferAsset#0: uint64 = itxn[createAppTxn#0].XferAsset + let createAppTxn.AssetAmount#0: uint64 = itxn[createAppTxn#0].AssetAmount + let createAppTxn.AssetSender#0: bytes = itxn[createAppTxn#0].AssetSender + let createAppTxn.AssetReceiver#0: bytes = itxn[createAppTxn#0].AssetReceiver + let createAppTxn.AssetCloseTo#0: bytes = itxn[createAppTxn#0].AssetCloseTo + let createAppTxn.GroupIndex#0: uint64 = itxn[createAppTxn#0].GroupIndex + let createAppTxn.TxID#0: bytes = itxn[createAppTxn#0].TxID + let createAppTxn.ApplicationID#0: uint64 = itxn[createAppTxn#0].ApplicationID + let createAppTxn.OnCompletion#0: uint64 = itxn[createAppTxn#0].OnCompletion + let createAppTxn.NumAppArgs#0: uint64 = itxn[createAppTxn#0].NumAppArgs + let createAppTxn.NumAccounts#0: uint64 = itxn[createAppTxn#0].NumAccounts + let createAppTxn.ApprovalProgram#0: bytes = itxn[createAppTxn#0].ApprovalProgram + let createAppTxn.ClearStateProgram#0: bytes = itxn[createAppTxn#0].ClearStateProgram + let createAppTxn.RekeyTo#0: bytes = itxn[createAppTxn#0].RekeyTo + let createAppTxn.ConfigAsset#0: uint64 = itxn[createAppTxn#0].ConfigAsset + let createAppTxn.ConfigAssetTotal#0: uint64 = itxn[createAppTxn#0].ConfigAssetTotal + let createAppTxn.ConfigAssetDecimals#0: uint64 = itxn[createAppTxn#0].ConfigAssetDecimals + let createAppTxn.ConfigAssetDefaultFrozen#0: bool = itxn[createAppTxn#0].ConfigAssetDefaultFrozen + let createAppTxn.ConfigAssetUnitName#0: bytes = itxn[createAppTxn#0].ConfigAssetUnitName + let createAppTxn.ConfigAssetName#0: bytes = itxn[createAppTxn#0].ConfigAssetName + let createAppTxn.ConfigAssetURL#0: bytes = itxn[createAppTxn#0].ConfigAssetURL + let createAppTxn.ConfigAssetMetadataHash#0: bytes = itxn[createAppTxn#0].ConfigAssetMetadataHash + let createAppTxn.ConfigAssetManager#0: bytes = itxn[createAppTxn#0].ConfigAssetManager + let createAppTxn.ConfigAssetReserve#0: bytes = itxn[createAppTxn#0].ConfigAssetReserve + let createAppTxn.ConfigAssetFreeze#0: bytes = itxn[createAppTxn#0].ConfigAssetFreeze + let createAppTxn.ConfigAssetClawback#0: bytes = itxn[createAppTxn#0].ConfigAssetClawback + let createAppTxn.FreezeAsset#0: uint64 = itxn[createAppTxn#0].FreezeAsset + let createAppTxn.FreezeAssetAccount#0: bytes = itxn[createAppTxn#0].FreezeAssetAccount + let createAppTxn.FreezeAssetFrozen#0: bool = itxn[createAppTxn#0].FreezeAssetFrozen + let createAppTxn.NumAssets#0: uint64 = itxn[createAppTxn#0].NumAssets + let createAppTxn.NumApplications#0: uint64 = itxn[createAppTxn#0].NumApplications + let createAppTxn.GlobalNumUint#0: uint64 = itxn[createAppTxn#0].GlobalNumUint + let createAppTxn.GlobalNumByteSlice#0: uint64 = itxn[createAppTxn#0].GlobalNumByteSlice + let createAppTxn.LocalNumUint#0: uint64 = itxn[createAppTxn#0].LocalNumUint + let createAppTxn.LocalNumByteSlice#0: uint64 = itxn[createAppTxn#0].LocalNumByteSlice + let createAppTxn.ExtraProgramPages#0: uint64 = itxn[createAppTxn#0].ExtraProgramPages + let createAppTxn.Nonparticipation#0: bool = itxn[createAppTxn#0].Nonparticipation + let createAppTxn.NumLogs#0: uint64 = itxn[createAppTxn#0].NumLogs + let createAppTxn.CreatedAssetID#0: uint64 = itxn[createAppTxn#0].CreatedAssetID + let createAppTxn.CreatedApplicationID#0: uint64 = itxn[createAppTxn#0].CreatedApplicationID + let createAppTxn.LastLog#0: bytes = itxn[createAppTxn#0].LastLog + let createAppTxn.StateProofPK#0: bytes = itxn[createAppTxn#0].StateProofPK + let createAppTxn.NumApprovalProgramPages#0: uint64 = itxn[createAppTxn#0].NumApprovalProgramPages + let createAppTxn.NumClearStateProgramPages#0: uint64 = itxn[createAppTxn#0].NumClearStateProgramPages + let tmp%0#0: bytes = itxn[createAppTxn#0].ApplicationArgs[0u] + let tmp%1#0: bool = (== tmp%0#0 "1") + (assert tmp%1#0) // correct args used 1 + let tmp%2#0: bytes = itxn[createAppTxn#0].ApplicationArgs[1u] + let tmp%3#0: bool = (== tmp%2#0 "2") + (assert tmp%3#0) // correct args used 2 + let tmp%4#0: bool = (== createAppTxn.Note#0 "with args param set") + (assert tmp%4#0) + return \ No newline at end of file diff --git a/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.clear.0.ssa.ir b/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/itxn/ItxnDemoContract.ir/ItxnDemoContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/itxn/ItxnDemoContract.ssa.ir b/tests/approvals/out/itxn/ItxnDemoContract.ssa.ir deleted file mode 100644 index 07e7e820..00000000 --- a/tests/approvals/out/itxn/ItxnDemoContract.ssa.ir +++ /dev/null @@ -1,770 +0,0 @@ -contract tests/approvals/itxn.algo.ts::ItxnDemoContract: - program approval: - subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.approvalProgram() -> bool: - block@0: // L10 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let reinterpret_bool%1#0: bool = (txn NumAppArgs) - goto reinterpret_bool%1#0 ? block@3 : block@15 - block@3: // if_body_L11 - let tmp%0#0: bytes = ((txnas ApplicationArgs) 0u) - switch tmp%0#0 {"test1" => block@4, "test2" => block@6, "test3" => block@8, "test4" => block@10, * => block@12} - block@4: // switch_case_0_L13 - goto block@5 - block@5: // L13 - tests/approvals/itxn.algo.ts::ItxnDemoContract.test1() - goto block@14 - block@6: // switch_case_1_L16 - goto block@7 - block@7: // L16 - tests/approvals/itxn.algo.ts::ItxnDemoContract.test2() - goto block@14 - block@8: // switch_case_2_L19 - goto block@9 - block@9: // L19 - goto block@11 - block@10: // switch_case_3_L20 - goto block@11 - block@11: // L20 - goto block@14 - block@12: // switch_case_default_L12 - goto block@13 - block@13: // switch_case_next_L12 - goto block@14 - block@14: // L12 - goto block@15 - block@15: // after_if_else_L11 - return 1u - - subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.constructor() -> void: - block@0: // L7 - (app_global_put "name" 0x) - return - - subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test1() -> void: - block@0: // L27 - (app_global_put "name" "AST1") - let assetParams#0: itxn_field_set = itxn_field_set(0) - let assetParams%%param_Fee_idx_0#0: uint64 = 0u - let assetParams%%Fee_length#0: uint64 = 1u - let assetParams%%param_TypeEnum_idx_0#0: uint64 = 3u - let assetParams%%TypeEnum_length#0: uint64 = 1u - let assetParams%%param_ConfigAssetTotal_idx_0#0: uint64 = 1000u - let assetParams%%ConfigAssetTotal_length#0: uint64 = 1u - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "name") - (assert maybe_exists%0#0) // check GlobalState exists - let assetParams%%param_ConfigAssetName_idx_0#0: bytes = maybe_value%0#0 - let assetParams%%ConfigAssetName_length#0: uint64 = 1u - let assetParams%%param_ConfigAssetUnitName_idx_0#0: bytes = "unit" - let assetParams%%ConfigAssetUnitName_length#0: uint64 = 1u - let assetParams%%param_ConfigAssetDecimals_idx_0#0: uint64 = 3u - let assetParams%%ConfigAssetDecimals_length#0: uint64 = 1u - let assetParams%%param_ConfigAssetManager_idx_0#0: bytes = (global CurrentApplicationAddress) - let assetParams%%ConfigAssetManager_length#0: uint64 = 1u - let assetParams%%param_ConfigAssetReserve_idx_0#0: bytes = (global CurrentApplicationAddress) - let assetParams%%ConfigAssetReserve_length#0: uint64 = 1u - let assetParams%%Sender_length#0: uint64 = 0u - let assetParams%%Note_length#0: uint64 = 0u - let assetParams%%Receiver_length#0: uint64 = 0u - let assetParams%%Amount_length#0: uint64 = 0u - let assetParams%%CloseRemainderTo_length#0: uint64 = 0u - let assetParams%%VotePK_length#0: uint64 = 0u - let assetParams%%SelectionPK_length#0: uint64 = 0u - let assetParams%%VoteFirst_length#0: uint64 = 0u - let assetParams%%VoteLast_length#0: uint64 = 0u - let assetParams%%VoteKeyDilution_length#0: uint64 = 0u - let assetParams%%Type_length#0: uint64 = 0u - let assetParams%%XferAsset_length#0: uint64 = 0u - let assetParams%%AssetAmount_length#0: uint64 = 0u - let assetParams%%AssetSender_length#0: uint64 = 0u - let assetParams%%AssetReceiver_length#0: uint64 = 0u - let assetParams%%AssetCloseTo_length#0: uint64 = 0u - let assetParams%%ApplicationID_length#0: uint64 = 0u - let assetParams%%OnCompletion_length#0: uint64 = 0u - let assetParams%%ApprovalProgram_length#0: uint64 = 0u - let assetParams%%ClearStateProgram_length#0: uint64 = 0u - let assetParams%%RekeyTo_length#0: uint64 = 0u - let assetParams%%ConfigAsset_length#0: uint64 = 0u - let assetParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let assetParams%%ConfigAssetURL_length#0: uint64 = 0u - let assetParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let assetParams%%ConfigAssetFreeze_length#0: uint64 = 0u - let assetParams%%ConfigAssetClawback_length#0: uint64 = 0u - let assetParams%%FreezeAsset_length#0: uint64 = 0u - let assetParams%%FreezeAssetAccount_length#0: uint64 = 0u - let assetParams%%FreezeAssetFrozen_length#0: uint64 = 0u - let assetParams%%GlobalNumUint_length#0: uint64 = 0u - let assetParams%%GlobalNumByteSlice_length#0: uint64 = 0u - let assetParams%%LocalNumUint_length#0: uint64 = 0u - let assetParams%%LocalNumByteSlice_length#0: uint64 = 0u - let assetParams%%ExtraProgramPages_length#0: uint64 = 0u - let assetParams%%Nonparticipation_length#0: uint64 = 0u - let assetParams%%StateProofPK_length#0: uint64 = 0u - let assetParams%%ApplicationArgs_length#0: uint64 = 0u - let assetParams%%Accounts_length#0: uint64 = 0u - let assetParams%%Assets_length#0: uint64 = 0u - let assetParams%%Applications_length#0: uint64 = 0u - let assetParams%%ApprovalProgramPages_length#0: uint64 = 0u - let assetParams%%ClearStateProgramPages_length#0: uint64 = 0u - (app_global_put "name" "AST2") - itxn_begin - ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) - ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) - ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) - ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) - ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#0) - ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) - ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) - goto block@1 - block@1: // next_txn_L40 - itxn_submit - let asset1_txn#0: itxn_group_idx = itxn_group_idx(0) - let asset1_txn._is_last#0: bool = 1u - let asset1_txn.Sender#0: bytes = itxn[asset1_txn#0].Sender - let asset1_txn.Fee#0: uint64 = itxn[asset1_txn#0].Fee - let asset1_txn.FirstValid#0: uint64 = itxn[asset1_txn#0].FirstValid - let asset1_txn.FirstValidTime#0: uint64 = itxn[asset1_txn#0].FirstValidTime - let asset1_txn.LastValid#0: uint64 = itxn[asset1_txn#0].LastValid - let asset1_txn.Note#0: bytes = itxn[asset1_txn#0].Note - let asset1_txn.Lease#0: bytes = itxn[asset1_txn#0].Lease - let asset1_txn.Receiver#0: bytes = itxn[asset1_txn#0].Receiver - let asset1_txn.Amount#0: uint64 = itxn[asset1_txn#0].Amount - let asset1_txn.CloseRemainderTo#0: bytes = itxn[asset1_txn#0].CloseRemainderTo - let asset1_txn.VotePK#0: bytes = itxn[asset1_txn#0].VotePK - let asset1_txn.SelectionPK#0: bytes = itxn[asset1_txn#0].SelectionPK - let asset1_txn.VoteFirst#0: uint64 = itxn[asset1_txn#0].VoteFirst - let asset1_txn.VoteLast#0: uint64 = itxn[asset1_txn#0].VoteLast - let asset1_txn.VoteKeyDilution#0: uint64 = itxn[asset1_txn#0].VoteKeyDilution - let asset1_txn.Type#0: bytes = itxn[asset1_txn#0].Type - let asset1_txn.TypeEnum#0: uint64 = itxn[asset1_txn#0].TypeEnum - let asset1_txn.XferAsset#0: uint64 = itxn[asset1_txn#0].XferAsset - let asset1_txn.AssetAmount#0: uint64 = itxn[asset1_txn#0].AssetAmount - let asset1_txn.AssetSender#0: bytes = itxn[asset1_txn#0].AssetSender - let asset1_txn.AssetReceiver#0: bytes = itxn[asset1_txn#0].AssetReceiver - let asset1_txn.AssetCloseTo#0: bytes = itxn[asset1_txn#0].AssetCloseTo - let asset1_txn.GroupIndex#0: uint64 = itxn[asset1_txn#0].GroupIndex - let asset1_txn.TxID#0: bytes = itxn[asset1_txn#0].TxID - let asset1_txn.ApplicationID#0: uint64 = itxn[asset1_txn#0].ApplicationID - let asset1_txn.OnCompletion#0: uint64 = itxn[asset1_txn#0].OnCompletion - let asset1_txn.NumAppArgs#0: uint64 = itxn[asset1_txn#0].NumAppArgs - let asset1_txn.NumAccounts#0: uint64 = itxn[asset1_txn#0].NumAccounts - let asset1_txn.ApprovalProgram#0: bytes = itxn[asset1_txn#0].ApprovalProgram - let asset1_txn.ClearStateProgram#0: bytes = itxn[asset1_txn#0].ClearStateProgram - let asset1_txn.RekeyTo#0: bytes = itxn[asset1_txn#0].RekeyTo - let asset1_txn.ConfigAsset#0: uint64 = itxn[asset1_txn#0].ConfigAsset - let asset1_txn.ConfigAssetTotal#0: uint64 = itxn[asset1_txn#0].ConfigAssetTotal - let asset1_txn.ConfigAssetDecimals#0: uint64 = itxn[asset1_txn#0].ConfigAssetDecimals - let asset1_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset1_txn#0].ConfigAssetDefaultFrozen - let asset1_txn.ConfigAssetUnitName#0: bytes = itxn[asset1_txn#0].ConfigAssetUnitName - let asset1_txn.ConfigAssetName#0: bytes = itxn[asset1_txn#0].ConfigAssetName - let asset1_txn.ConfigAssetURL#0: bytes = itxn[asset1_txn#0].ConfigAssetURL - let asset1_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset1_txn#0].ConfigAssetMetadataHash - let asset1_txn.ConfigAssetManager#0: bytes = itxn[asset1_txn#0].ConfigAssetManager - let asset1_txn.ConfigAssetReserve#0: bytes = itxn[asset1_txn#0].ConfigAssetReserve - let asset1_txn.ConfigAssetFreeze#0: bytes = itxn[asset1_txn#0].ConfigAssetFreeze - let asset1_txn.ConfigAssetClawback#0: bytes = itxn[asset1_txn#0].ConfigAssetClawback - let asset1_txn.FreezeAsset#0: uint64 = itxn[asset1_txn#0].FreezeAsset - let asset1_txn.FreezeAssetAccount#0: bytes = itxn[asset1_txn#0].FreezeAssetAccount - let asset1_txn.FreezeAssetFrozen#0: bool = itxn[asset1_txn#0].FreezeAssetFrozen - let asset1_txn.NumAssets#0: uint64 = itxn[asset1_txn#0].NumAssets - let asset1_txn.NumApplications#0: uint64 = itxn[asset1_txn#0].NumApplications - let asset1_txn.GlobalNumUint#0: uint64 = itxn[asset1_txn#0].GlobalNumUint - let asset1_txn.GlobalNumByteSlice#0: uint64 = itxn[asset1_txn#0].GlobalNumByteSlice - let asset1_txn.LocalNumUint#0: uint64 = itxn[asset1_txn#0].LocalNumUint - let asset1_txn.LocalNumByteSlice#0: uint64 = itxn[asset1_txn#0].LocalNumByteSlice - let asset1_txn.ExtraProgramPages#0: uint64 = itxn[asset1_txn#0].ExtraProgramPages - let asset1_txn.Nonparticipation#0: bool = itxn[asset1_txn#0].Nonparticipation - let asset1_txn.NumLogs#0: uint64 = itxn[asset1_txn#0].NumLogs - let asset1_txn.CreatedAssetID#0: uint64 = itxn[asset1_txn#0].CreatedAssetID - let asset1_txn.CreatedApplicationID#0: uint64 = itxn[asset1_txn#0].CreatedApplicationID - let asset1_txn.LastLog#0: bytes = itxn[asset1_txn#0].LastLog - let asset1_txn.StateProofPK#0: bytes = itxn[asset1_txn#0].StateProofPK - let asset1_txn.NumApprovalProgramPages#0: uint64 = itxn[asset1_txn#0].NumApprovalProgramPages - let asset1_txn.NumClearStateProgramPages#0: uint64 = itxn[asset1_txn#0].NumClearStateProgramPages - let assetParams#1: itxn_field_set = itxn_field_set(1) - let (maybe_value%1#0: bytes, maybe_exists%1#0: bool) = (app_global_get_ex 0u "name") - (assert maybe_exists%1#0) // check GlobalState exists - let assetParams%%param_ConfigAssetName_idx_0#1: bytes = maybe_value%1#0 - let assetParams%%ConfigAssetName_length#1: uint64 = 1u - itxn_begin - ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) - ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) - ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) - ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) - ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#1) - ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) - ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) - goto block@2 - block@2: // next_txn_L44 - itxn_submit - let asset2_txn#0: itxn_group_idx = itxn_group_idx(0) - let asset2_txn._is_last#0: bool = 1u - let asset2_txn.Sender#0: bytes = itxn[asset2_txn#0].Sender - let asset2_txn.Fee#0: uint64 = itxn[asset2_txn#0].Fee - let asset2_txn.FirstValid#0: uint64 = itxn[asset2_txn#0].FirstValid - let asset2_txn.FirstValidTime#0: uint64 = itxn[asset2_txn#0].FirstValidTime - let asset2_txn.LastValid#0: uint64 = itxn[asset2_txn#0].LastValid - let asset2_txn.Note#0: bytes = itxn[asset2_txn#0].Note - let asset2_txn.Lease#0: bytes = itxn[asset2_txn#0].Lease - let asset2_txn.Receiver#0: bytes = itxn[asset2_txn#0].Receiver - let asset2_txn.Amount#0: uint64 = itxn[asset2_txn#0].Amount - let asset2_txn.CloseRemainderTo#0: bytes = itxn[asset2_txn#0].CloseRemainderTo - let asset2_txn.VotePK#0: bytes = itxn[asset2_txn#0].VotePK - let asset2_txn.SelectionPK#0: bytes = itxn[asset2_txn#0].SelectionPK - let asset2_txn.VoteFirst#0: uint64 = itxn[asset2_txn#0].VoteFirst - let asset2_txn.VoteLast#0: uint64 = itxn[asset2_txn#0].VoteLast - let asset2_txn.VoteKeyDilution#0: uint64 = itxn[asset2_txn#0].VoteKeyDilution - let asset2_txn.Type#0: bytes = itxn[asset2_txn#0].Type - let asset2_txn.TypeEnum#0: uint64 = itxn[asset2_txn#0].TypeEnum - let asset2_txn.XferAsset#0: uint64 = itxn[asset2_txn#0].XferAsset - let asset2_txn.AssetAmount#0: uint64 = itxn[asset2_txn#0].AssetAmount - let asset2_txn.AssetSender#0: bytes = itxn[asset2_txn#0].AssetSender - let asset2_txn.AssetReceiver#0: bytes = itxn[asset2_txn#0].AssetReceiver - let asset2_txn.AssetCloseTo#0: bytes = itxn[asset2_txn#0].AssetCloseTo - let asset2_txn.GroupIndex#0: uint64 = itxn[asset2_txn#0].GroupIndex - let asset2_txn.TxID#0: bytes = itxn[asset2_txn#0].TxID - let asset2_txn.ApplicationID#0: uint64 = itxn[asset2_txn#0].ApplicationID - let asset2_txn.OnCompletion#0: uint64 = itxn[asset2_txn#0].OnCompletion - let asset2_txn.NumAppArgs#0: uint64 = itxn[asset2_txn#0].NumAppArgs - let asset2_txn.NumAccounts#0: uint64 = itxn[asset2_txn#0].NumAccounts - let asset2_txn.ApprovalProgram#0: bytes = itxn[asset2_txn#0].ApprovalProgram - let asset2_txn.ClearStateProgram#0: bytes = itxn[asset2_txn#0].ClearStateProgram - let asset2_txn.RekeyTo#0: bytes = itxn[asset2_txn#0].RekeyTo - let asset2_txn.ConfigAsset#0: uint64 = itxn[asset2_txn#0].ConfigAsset - let asset2_txn.ConfigAssetTotal#0: uint64 = itxn[asset2_txn#0].ConfigAssetTotal - let asset2_txn.ConfigAssetDecimals#0: uint64 = itxn[asset2_txn#0].ConfigAssetDecimals - let asset2_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset2_txn#0].ConfigAssetDefaultFrozen - let asset2_txn.ConfigAssetUnitName#0: bytes = itxn[asset2_txn#0].ConfigAssetUnitName - let asset2_txn.ConfigAssetName#0: bytes = itxn[asset2_txn#0].ConfigAssetName - let asset2_txn.ConfigAssetURL#0: bytes = itxn[asset2_txn#0].ConfigAssetURL - let asset2_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset2_txn#0].ConfigAssetMetadataHash - let asset2_txn.ConfigAssetManager#0: bytes = itxn[asset2_txn#0].ConfigAssetManager - let asset2_txn.ConfigAssetReserve#0: bytes = itxn[asset2_txn#0].ConfigAssetReserve - let asset2_txn.ConfigAssetFreeze#0: bytes = itxn[asset2_txn#0].ConfigAssetFreeze - let asset2_txn.ConfigAssetClawback#0: bytes = itxn[asset2_txn#0].ConfigAssetClawback - let asset2_txn.FreezeAsset#0: uint64 = itxn[asset2_txn#0].FreezeAsset - let asset2_txn.FreezeAssetAccount#0: bytes = itxn[asset2_txn#0].FreezeAssetAccount - let asset2_txn.FreezeAssetFrozen#0: bool = itxn[asset2_txn#0].FreezeAssetFrozen - let asset2_txn.NumAssets#0: uint64 = itxn[asset2_txn#0].NumAssets - let asset2_txn.NumApplications#0: uint64 = itxn[asset2_txn#0].NumApplications - let asset2_txn.GlobalNumUint#0: uint64 = itxn[asset2_txn#0].GlobalNumUint - let asset2_txn.GlobalNumByteSlice#0: uint64 = itxn[asset2_txn#0].GlobalNumByteSlice - let asset2_txn.LocalNumUint#0: uint64 = itxn[asset2_txn#0].LocalNumUint - let asset2_txn.LocalNumByteSlice#0: uint64 = itxn[asset2_txn#0].LocalNumByteSlice - let asset2_txn.ExtraProgramPages#0: uint64 = itxn[asset2_txn#0].ExtraProgramPages - let asset2_txn.Nonparticipation#0: bool = itxn[asset2_txn#0].Nonparticipation - let asset2_txn.NumLogs#0: uint64 = itxn[asset2_txn#0].NumLogs - let asset2_txn.CreatedAssetID#0: uint64 = itxn[asset2_txn#0].CreatedAssetID - let asset2_txn.CreatedApplicationID#0: uint64 = itxn[asset2_txn#0].CreatedApplicationID - let asset2_txn.LastLog#0: bytes = itxn[asset2_txn#0].LastLog - let asset2_txn.StateProofPK#0: bytes = itxn[asset2_txn#0].StateProofPK - let asset2_txn.NumApprovalProgramPages#0: uint64 = itxn[asset2_txn#0].NumApprovalProgramPages - let asset2_txn.NumClearStateProgramPages#0: uint64 = itxn[asset2_txn#0].NumClearStateProgramPages - let tmp%0#0: bool = (== asset1_txn.ConfigAssetName#0 "AST1") - (assert tmp%0#0) // asset1_txn is correct - let tmp%1#0: bool = (== asset2_txn.ConfigAssetName#0 "AST2") - (assert tmp%1#0) // asset2_txn is correct - let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset1_txn.CreatedAssetID#0) - (assert check%0#0) // asset exists - let tmp%2#0: bool = (== value%0#0 "AST1") - (assert tmp%2#0) // created asset 1 is correct - let (value%1#0: bytes, check%1#0: bool) = ((asset_params_get AssetName) asset2_txn.CreatedAssetID#0) - (assert check%1#0) // asset exists - let tmp%3#0: bool = (== value%1#0 "AST2") - (assert tmp%3#0) // created asset 2 is correct - let appCreateParams#0: itxn_field_set = itxn_field_set(2) - let appCreateParams%%param_Fee_idx_0#0: uint64 = 0u - let appCreateParams%%Fee_length#0: uint64 = 1u - let appCreateParams%%param_TypeEnum_idx_0#0: uint64 = 6u - let appCreateParams%%TypeEnum_length#0: uint64 = 1u - let appCreateParams%%param_ApprovalProgramPages_idx_0#0: bytes = 0x098101 - let appCreateParams%%ApprovalProgramPages_length#0: uint64 = 1u - let appCreateParams%%param_ClearStateProgramPages_idx_0#0: bytes = 0x098101 - let appCreateParams%%ClearStateProgramPages_length#0: uint64 = 1u - let appCreateParams%%Sender_length#0: uint64 = 0u - let appCreateParams%%Note_length#0: uint64 = 0u - let appCreateParams%%Receiver_length#0: uint64 = 0u - let appCreateParams%%Amount_length#0: uint64 = 0u - let appCreateParams%%CloseRemainderTo_length#0: uint64 = 0u - let appCreateParams%%VotePK_length#0: uint64 = 0u - let appCreateParams%%SelectionPK_length#0: uint64 = 0u - let appCreateParams%%VoteFirst_length#0: uint64 = 0u - let appCreateParams%%VoteLast_length#0: uint64 = 0u - let appCreateParams%%VoteKeyDilution_length#0: uint64 = 0u - let appCreateParams%%Type_length#0: uint64 = 0u - let appCreateParams%%XferAsset_length#0: uint64 = 0u - let appCreateParams%%AssetAmount_length#0: uint64 = 0u - let appCreateParams%%AssetSender_length#0: uint64 = 0u - let appCreateParams%%AssetReceiver_length#0: uint64 = 0u - let appCreateParams%%AssetCloseTo_length#0: uint64 = 0u - let appCreateParams%%ApplicationID_length#0: uint64 = 0u - let appCreateParams%%OnCompletion_length#0: uint64 = 0u - let appCreateParams%%ApprovalProgram_length#0: uint64 = 0u - let appCreateParams%%ClearStateProgram_length#0: uint64 = 0u - let appCreateParams%%RekeyTo_length#0: uint64 = 0u - let appCreateParams%%ConfigAsset_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetTotal_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetDecimals_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetUnitName_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetName_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetURL_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetManager_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetReserve_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetFreeze_length#0: uint64 = 0u - let appCreateParams%%ConfigAssetClawback_length#0: uint64 = 0u - let appCreateParams%%FreezeAsset_length#0: uint64 = 0u - let appCreateParams%%FreezeAssetAccount_length#0: uint64 = 0u - let appCreateParams%%FreezeAssetFrozen_length#0: uint64 = 0u - let appCreateParams%%GlobalNumUint_length#0: uint64 = 0u - let appCreateParams%%GlobalNumByteSlice_length#0: uint64 = 0u - let appCreateParams%%LocalNumUint_length#0: uint64 = 0u - let appCreateParams%%LocalNumByteSlice_length#0: uint64 = 0u - let appCreateParams%%ExtraProgramPages_length#0: uint64 = 0u - let appCreateParams%%Nonparticipation_length#0: uint64 = 0u - let appCreateParams%%StateProofPK_length#0: uint64 = 0u - let appCreateParams%%ApplicationArgs_length#0: uint64 = 0u - let appCreateParams%%Accounts_length#0: uint64 = 0u - let appCreateParams%%Assets_length#0: uint64 = 0u - let appCreateParams%%Applications_length#0: uint64 = 0u - let assetParams#2: itxn_field_set = itxn_field_set(3) - let assetParams%%param_ConfigAssetName_idx_0#2: bytes = "AST3" - let assetParams%%ConfigAssetName_length#2: uint64 = 1u - itxn_begin - ((itxn_field ClearStateProgramPages) appCreateParams%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) appCreateParams%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field TypeEnum) appCreateParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) appCreateParams%%param_Fee_idx_0#0) - goto block@3 - block@3: // next_txn_L61 - itxn_next - ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) - ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) - ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) - ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) - ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#2) - ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) - ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) - goto block@4 - block@4: // next_txn_L61 - itxn_submit - let appCreateTxn#0: itxn_group_idx = itxn_group_idx(0) - let asset3_txn#0: itxn_group_idx = itxn_group_idx(1) - let appCreateTxn._is_last#0: bool = 0u - let appCreateTxn.Sender#0: bytes = itxn[appCreateTxn#0].Sender - let appCreateTxn.Fee#0: uint64 = itxn[appCreateTxn#0].Fee - let appCreateTxn.FirstValid#0: uint64 = itxn[appCreateTxn#0].FirstValid - let appCreateTxn.FirstValidTime#0: uint64 = itxn[appCreateTxn#0].FirstValidTime - let appCreateTxn.LastValid#0: uint64 = itxn[appCreateTxn#0].LastValid - let appCreateTxn.Note#0: bytes = itxn[appCreateTxn#0].Note - let appCreateTxn.Lease#0: bytes = itxn[appCreateTxn#0].Lease - let appCreateTxn.Receiver#0: bytes = itxn[appCreateTxn#0].Receiver - let appCreateTxn.Amount#0: uint64 = itxn[appCreateTxn#0].Amount - let appCreateTxn.CloseRemainderTo#0: bytes = itxn[appCreateTxn#0].CloseRemainderTo - let appCreateTxn.VotePK#0: bytes = itxn[appCreateTxn#0].VotePK - let appCreateTxn.SelectionPK#0: bytes = itxn[appCreateTxn#0].SelectionPK - let appCreateTxn.VoteFirst#0: uint64 = itxn[appCreateTxn#0].VoteFirst - let appCreateTxn.VoteLast#0: uint64 = itxn[appCreateTxn#0].VoteLast - let appCreateTxn.VoteKeyDilution#0: uint64 = itxn[appCreateTxn#0].VoteKeyDilution - let appCreateTxn.Type#0: bytes = itxn[appCreateTxn#0].Type - let appCreateTxn.TypeEnum#0: uint64 = itxn[appCreateTxn#0].TypeEnum - let appCreateTxn.XferAsset#0: uint64 = itxn[appCreateTxn#0].XferAsset - let appCreateTxn.AssetAmount#0: uint64 = itxn[appCreateTxn#0].AssetAmount - let appCreateTxn.AssetSender#0: bytes = itxn[appCreateTxn#0].AssetSender - let appCreateTxn.AssetReceiver#0: bytes = itxn[appCreateTxn#0].AssetReceiver - let appCreateTxn.AssetCloseTo#0: bytes = itxn[appCreateTxn#0].AssetCloseTo - let appCreateTxn.GroupIndex#0: uint64 = itxn[appCreateTxn#0].GroupIndex - let appCreateTxn.TxID#0: bytes = itxn[appCreateTxn#0].TxID - let appCreateTxn.ApplicationID#0: uint64 = itxn[appCreateTxn#0].ApplicationID - let appCreateTxn.OnCompletion#0: uint64 = itxn[appCreateTxn#0].OnCompletion - let appCreateTxn.NumAppArgs#0: uint64 = itxn[appCreateTxn#0].NumAppArgs - let appCreateTxn.NumAccounts#0: uint64 = itxn[appCreateTxn#0].NumAccounts - let appCreateTxn.ApprovalProgram#0: bytes = itxn[appCreateTxn#0].ApprovalProgram - let appCreateTxn.ClearStateProgram#0: bytes = itxn[appCreateTxn#0].ClearStateProgram - let appCreateTxn.RekeyTo#0: bytes = itxn[appCreateTxn#0].RekeyTo - let appCreateTxn.ConfigAsset#0: uint64 = itxn[appCreateTxn#0].ConfigAsset - let appCreateTxn.ConfigAssetTotal#0: uint64 = itxn[appCreateTxn#0].ConfigAssetTotal - let appCreateTxn.ConfigAssetDecimals#0: uint64 = itxn[appCreateTxn#0].ConfigAssetDecimals - let appCreateTxn.ConfigAssetDefaultFrozen#0: bool = itxn[appCreateTxn#0].ConfigAssetDefaultFrozen - let appCreateTxn.ConfigAssetUnitName#0: bytes = itxn[appCreateTxn#0].ConfigAssetUnitName - let appCreateTxn.ConfigAssetName#0: bytes = itxn[appCreateTxn#0].ConfigAssetName - let appCreateTxn.ConfigAssetURL#0: bytes = itxn[appCreateTxn#0].ConfigAssetURL - let appCreateTxn.ConfigAssetMetadataHash#0: bytes = itxn[appCreateTxn#0].ConfigAssetMetadataHash - let appCreateTxn.ConfigAssetManager#0: bytes = itxn[appCreateTxn#0].ConfigAssetManager - let appCreateTxn.ConfigAssetReserve#0: bytes = itxn[appCreateTxn#0].ConfigAssetReserve - let appCreateTxn.ConfigAssetFreeze#0: bytes = itxn[appCreateTxn#0].ConfigAssetFreeze - let appCreateTxn.ConfigAssetClawback#0: bytes = itxn[appCreateTxn#0].ConfigAssetClawback - let appCreateTxn.FreezeAsset#0: uint64 = itxn[appCreateTxn#0].FreezeAsset - let appCreateTxn.FreezeAssetAccount#0: bytes = itxn[appCreateTxn#0].FreezeAssetAccount - let appCreateTxn.FreezeAssetFrozen#0: bool = itxn[appCreateTxn#0].FreezeAssetFrozen - let appCreateTxn.NumAssets#0: uint64 = itxn[appCreateTxn#0].NumAssets - let appCreateTxn.NumApplications#0: uint64 = itxn[appCreateTxn#0].NumApplications - let appCreateTxn.GlobalNumUint#0: uint64 = itxn[appCreateTxn#0].GlobalNumUint - let appCreateTxn.GlobalNumByteSlice#0: uint64 = itxn[appCreateTxn#0].GlobalNumByteSlice - let appCreateTxn.LocalNumUint#0: uint64 = itxn[appCreateTxn#0].LocalNumUint - let appCreateTxn.LocalNumByteSlice#0: uint64 = itxn[appCreateTxn#0].LocalNumByteSlice - let appCreateTxn.ExtraProgramPages#0: uint64 = itxn[appCreateTxn#0].ExtraProgramPages - let appCreateTxn.Nonparticipation#0: bool = itxn[appCreateTxn#0].Nonparticipation - let appCreateTxn.NumLogs#0: uint64 = itxn[appCreateTxn#0].NumLogs - let appCreateTxn.CreatedAssetID#0: uint64 = itxn[appCreateTxn#0].CreatedAssetID - let appCreateTxn.CreatedApplicationID#0: uint64 = itxn[appCreateTxn#0].CreatedApplicationID - let appCreateTxn.LastLog#0: bytes = itxn[appCreateTxn#0].LastLog - let appCreateTxn.StateProofPK#0: bytes = itxn[appCreateTxn#0].StateProofPK - let appCreateTxn.NumApprovalProgramPages#0: uint64 = itxn[appCreateTxn#0].NumApprovalProgramPages - let appCreateTxn.NumClearStateProgramPages#0: uint64 = itxn[appCreateTxn#0].NumClearStateProgramPages - let asset3_txn._is_last#0: bool = 1u - let asset3_txn.Sender#0: bytes = itxn[asset3_txn#0].Sender - let asset3_txn.Fee#0: uint64 = itxn[asset3_txn#0].Fee - let asset3_txn.FirstValid#0: uint64 = itxn[asset3_txn#0].FirstValid - let asset3_txn.FirstValidTime#0: uint64 = itxn[asset3_txn#0].FirstValidTime - let asset3_txn.LastValid#0: uint64 = itxn[asset3_txn#0].LastValid - let asset3_txn.Note#0: bytes = itxn[asset3_txn#0].Note - let asset3_txn.Lease#0: bytes = itxn[asset3_txn#0].Lease - let asset3_txn.Receiver#0: bytes = itxn[asset3_txn#0].Receiver - let asset3_txn.Amount#0: uint64 = itxn[asset3_txn#0].Amount - let asset3_txn.CloseRemainderTo#0: bytes = itxn[asset3_txn#0].CloseRemainderTo - let asset3_txn.VotePK#0: bytes = itxn[asset3_txn#0].VotePK - let asset3_txn.SelectionPK#0: bytes = itxn[asset3_txn#0].SelectionPK - let asset3_txn.VoteFirst#0: uint64 = itxn[asset3_txn#0].VoteFirst - let asset3_txn.VoteLast#0: uint64 = itxn[asset3_txn#0].VoteLast - let asset3_txn.VoteKeyDilution#0: uint64 = itxn[asset3_txn#0].VoteKeyDilution - let asset3_txn.Type#0: bytes = itxn[asset3_txn#0].Type - let asset3_txn.TypeEnum#0: uint64 = itxn[asset3_txn#0].TypeEnum - let asset3_txn.XferAsset#0: uint64 = itxn[asset3_txn#0].XferAsset - let asset3_txn.AssetAmount#0: uint64 = itxn[asset3_txn#0].AssetAmount - let asset3_txn.AssetSender#0: bytes = itxn[asset3_txn#0].AssetSender - let asset3_txn.AssetReceiver#0: bytes = itxn[asset3_txn#0].AssetReceiver - let asset3_txn.AssetCloseTo#0: bytes = itxn[asset3_txn#0].AssetCloseTo - let asset3_txn.GroupIndex#0: uint64 = itxn[asset3_txn#0].GroupIndex - let asset3_txn.TxID#0: bytes = itxn[asset3_txn#0].TxID - let asset3_txn.ApplicationID#0: uint64 = itxn[asset3_txn#0].ApplicationID - let asset3_txn.OnCompletion#0: uint64 = itxn[asset3_txn#0].OnCompletion - let asset3_txn.NumAppArgs#0: uint64 = itxn[asset3_txn#0].NumAppArgs - let asset3_txn.NumAccounts#0: uint64 = itxn[asset3_txn#0].NumAccounts - let asset3_txn.ApprovalProgram#0: bytes = itxn[asset3_txn#0].ApprovalProgram - let asset3_txn.ClearStateProgram#0: bytes = itxn[asset3_txn#0].ClearStateProgram - let asset3_txn.RekeyTo#0: bytes = itxn[asset3_txn#0].RekeyTo - let asset3_txn.ConfigAsset#0: uint64 = itxn[asset3_txn#0].ConfigAsset - let asset3_txn.ConfigAssetTotal#0: uint64 = itxn[asset3_txn#0].ConfigAssetTotal - let asset3_txn.ConfigAssetDecimals#0: uint64 = itxn[asset3_txn#0].ConfigAssetDecimals - let asset3_txn.ConfigAssetDefaultFrozen#0: bool = itxn[asset3_txn#0].ConfigAssetDefaultFrozen - let asset3_txn.ConfigAssetUnitName#0: bytes = itxn[asset3_txn#0].ConfigAssetUnitName - let asset3_txn.ConfigAssetName#0: bytes = itxn[asset3_txn#0].ConfigAssetName - let asset3_txn.ConfigAssetURL#0: bytes = itxn[asset3_txn#0].ConfigAssetURL - let asset3_txn.ConfigAssetMetadataHash#0: bytes = itxn[asset3_txn#0].ConfigAssetMetadataHash - let asset3_txn.ConfigAssetManager#0: bytes = itxn[asset3_txn#0].ConfigAssetManager - let asset3_txn.ConfigAssetReserve#0: bytes = itxn[asset3_txn#0].ConfigAssetReserve - let asset3_txn.ConfigAssetFreeze#0: bytes = itxn[asset3_txn#0].ConfigAssetFreeze - let asset3_txn.ConfigAssetClawback#0: bytes = itxn[asset3_txn#0].ConfigAssetClawback - let asset3_txn.FreezeAsset#0: uint64 = itxn[asset3_txn#0].FreezeAsset - let asset3_txn.FreezeAssetAccount#0: bytes = itxn[asset3_txn#0].FreezeAssetAccount - let asset3_txn.FreezeAssetFrozen#0: bool = itxn[asset3_txn#0].FreezeAssetFrozen - let asset3_txn.NumAssets#0: uint64 = itxn[asset3_txn#0].NumAssets - let asset3_txn.NumApplications#0: uint64 = itxn[asset3_txn#0].NumApplications - let asset3_txn.GlobalNumUint#0: uint64 = itxn[asset3_txn#0].GlobalNumUint - let asset3_txn.GlobalNumByteSlice#0: uint64 = itxn[asset3_txn#0].GlobalNumByteSlice - let asset3_txn.LocalNumUint#0: uint64 = itxn[asset3_txn#0].LocalNumUint - let asset3_txn.LocalNumByteSlice#0: uint64 = itxn[asset3_txn#0].LocalNumByteSlice - let asset3_txn.ExtraProgramPages#0: uint64 = itxn[asset3_txn#0].ExtraProgramPages - let asset3_txn.Nonparticipation#0: bool = itxn[asset3_txn#0].Nonparticipation - let asset3_txn.NumLogs#0: uint64 = itxn[asset3_txn#0].NumLogs - let asset3_txn.CreatedAssetID#0: uint64 = itxn[asset3_txn#0].CreatedAssetID - let asset3_txn.CreatedApplicationID#0: uint64 = itxn[asset3_txn#0].CreatedApplicationID - let asset3_txn.LastLog#0: bytes = itxn[asset3_txn#0].LastLog - let asset3_txn.StateProofPK#0: bytes = itxn[asset3_txn#0].StateProofPK - let asset3_txn.NumApprovalProgramPages#0: uint64 = itxn[asset3_txn#0].NumApprovalProgramPages - let asset3_txn.NumClearStateProgramPages#0: uint64 = itxn[asset3_txn#0].NumClearStateProgramPages - let reinterpret_bool%0#0: bool = appCreateTxn.ApplicationID#0 - (assert reinterpret_bool%0#0) // app is created - let tmp%4#0: bool = (== asset3_txn.ConfigAssetName#0 "AST3") - (assert tmp%4#0) // asset3_txn is correct - let appCreateParams#1: itxn_field_set = itxn_field_set(4) - let appCreateParams%%param_Note_idx_0#0: bytes = "3rd" - let appCreateParams%%Note_length#1: uint64 = 1u - let assetParams#3: itxn_field_set = itxn_field_set(5) - let assetParams%%param_Note_idx_0#0: bytes = "3rd" - let assetParams%%Note_length#1: uint64 = 1u - itxn_begin - let is_Note_count_gte_1%0#0: bool = (>= appCreateParams%%Note_length#1 1u) - goto is_Note_count_gte_1%0#0 ? block@5 : block@6 - block@5: // set_Note_0_to_0_L72 - ((itxn_field Note) appCreateParams%%param_Note_idx_0#0) - goto block@6 - block@6: // next_field_L72 - ((itxn_field ClearStateProgramPages) appCreateParams%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) appCreateParams%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field TypeEnum) appCreateParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) appCreateParams%%param_Fee_idx_0#0) - goto block@7 - block@7: // next_txn_L72 - itxn_next - let is_Note_count_gte_1%1#0: bool = (>= assetParams%%Note_length#1 1u) - goto is_Note_count_gte_1%1#0 ? block@8 : block@9 - block@8: // set_Note_0_to_0_L72 - ((itxn_field Note) assetParams%%param_Note_idx_0#0) - goto block@9 - block@9: // next_field_L72 - ((itxn_field ConfigAssetReserve) assetParams%%param_ConfigAssetReserve_idx_0#0) - ((itxn_field ConfigAssetManager) assetParams%%param_ConfigAssetManager_idx_0#0) - ((itxn_field ConfigAssetDecimals) assetParams%%param_ConfigAssetDecimals_idx_0#0) - ((itxn_field ConfigAssetUnitName) assetParams%%param_ConfigAssetUnitName_idx_0#0) - ((itxn_field ConfigAssetName) assetParams%%param_ConfigAssetName_idx_0#2) - ((itxn_field ConfigAssetTotal) assetParams%%param_ConfigAssetTotal_idx_0#0) - ((itxn_field TypeEnum) assetParams%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) assetParams%%param_Fee_idx_0#0) - goto block@10 - block@10: // next_txn_L72 - itxn_submit - return - - subroutine tests/approvals/itxn.algo.ts::ItxnDemoContract.test2() -> void: - block@0: // L75 - let createAppParams%%param_OnCompletion_idx_0#2: uint64 = undefined - let createAppParams%%param_ApplicationArgs_idx_2#3: bytes = undefined - let reinterpret_bool%0#0: bool = (txn NumAppArgs) - goto reinterpret_bool%0#0 ? block@1 : block@2 - block@1: // if_body_L77 - let (args.0#0: bytes, args.1#0: bytes) = ("1", "2") - let createAppParams#0: itxn_field_set = itxn_field_set(0) - let createAppParams%%param_Fee_idx_0#0: uint64 = 0u - let createAppParams%%Fee_length#0: uint64 = 1u - let createAppParams%%param_TypeEnum_idx_0#0: uint64 = 6u - let createAppParams%%TypeEnum_length#0: uint64 = 1u - let createAppParams%%param_ApprovalProgramPages_idx_0#0: bytes = "\t\xc2\x81\x01" - let createAppParams%%ApprovalProgramPages_length#0: uint64 = 1u - let createAppParams%%param_ClearStateProgramPages_idx_0#0: bytes = "\t\xc2\x81\x01" - let createAppParams%%ClearStateProgramPages_length#0: uint64 = 1u - let createAppParams%%param_ApplicationArgs_idx_0#0: bytes = args.0#0 - let createAppParams%%param_ApplicationArgs_idx_1#0: bytes = args.1#0 - let createAppParams%%ApplicationArgs_length#0: uint64 = 2u - let createAppParams%%param_OnCompletion_idx_0#0: uint64 = 0u - let createAppParams%%OnCompletion_length#0: uint64 = 1u - let createAppParams%%param_Note_idx_0#0: bytes = "with args param set" - let createAppParams%%Note_length#0: uint64 = 1u - let createAppParams%%Sender_length#0: uint64 = 0u - let createAppParams%%Receiver_length#0: uint64 = 0u - let createAppParams%%Amount_length#0: uint64 = 0u - let createAppParams%%CloseRemainderTo_length#0: uint64 = 0u - let createAppParams%%VotePK_length#0: uint64 = 0u - let createAppParams%%SelectionPK_length#0: uint64 = 0u - let createAppParams%%VoteFirst_length#0: uint64 = 0u - let createAppParams%%VoteLast_length#0: uint64 = 0u - let createAppParams%%VoteKeyDilution_length#0: uint64 = 0u - let createAppParams%%Type_length#0: uint64 = 0u - let createAppParams%%XferAsset_length#0: uint64 = 0u - let createAppParams%%AssetAmount_length#0: uint64 = 0u - let createAppParams%%AssetSender_length#0: uint64 = 0u - let createAppParams%%AssetReceiver_length#0: uint64 = 0u - let createAppParams%%AssetCloseTo_length#0: uint64 = 0u - let createAppParams%%ApplicationID_length#0: uint64 = 0u - let createAppParams%%ApprovalProgram_length#0: uint64 = 0u - let createAppParams%%ClearStateProgram_length#0: uint64 = 0u - let createAppParams%%RekeyTo_length#0: uint64 = 0u - let createAppParams%%ConfigAsset_length#0: uint64 = 0u - let createAppParams%%ConfigAssetTotal_length#0: uint64 = 0u - let createAppParams%%ConfigAssetDecimals_length#0: uint64 = 0u - let createAppParams%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let createAppParams%%ConfigAssetUnitName_length#0: uint64 = 0u - let createAppParams%%ConfigAssetName_length#0: uint64 = 0u - let createAppParams%%ConfigAssetURL_length#0: uint64 = 0u - let createAppParams%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let createAppParams%%ConfigAssetManager_length#0: uint64 = 0u - let createAppParams%%ConfigAssetReserve_length#0: uint64 = 0u - let createAppParams%%ConfigAssetFreeze_length#0: uint64 = 0u - let createAppParams%%ConfigAssetClawback_length#0: uint64 = 0u - let createAppParams%%FreezeAsset_length#0: uint64 = 0u - let createAppParams%%FreezeAssetAccount_length#0: uint64 = 0u - let createAppParams%%FreezeAssetFrozen_length#0: uint64 = 0u - let createAppParams%%GlobalNumUint_length#0: uint64 = 0u - let createAppParams%%GlobalNumByteSlice_length#0: uint64 = 0u - let createAppParams%%LocalNumUint_length#0: uint64 = 0u - let createAppParams%%LocalNumByteSlice_length#0: uint64 = 0u - let createAppParams%%ExtraProgramPages_length#0: uint64 = 0u - let createAppParams%%Nonparticipation_length#0: uint64 = 0u - let createAppParams%%StateProofPK_length#0: uint64 = 0u - let createAppParams%%Accounts_length#0: uint64 = 0u - let createAppParams%%Assets_length#0: uint64 = 0u - let createAppParams%%Applications_length#0: uint64 = 0u - goto block@3 - block@2: // else_body_L86 - let createAppParams#1: itxn_field_set = itxn_field_set(1) - let createAppParams%%param_Fee_idx_0#1: uint64 = 0u - let createAppParams%%Fee_length#1: uint64 = 1u - let createAppParams%%param_TypeEnum_idx_0#1: uint64 = 6u - let createAppParams%%TypeEnum_length#1: uint64 = 1u - let createAppParams%%param_ApprovalProgramPages_idx_0#1: bytes = "\t\xc2\x81\x01" - let createAppParams%%ApprovalProgramPages_length#1: uint64 = 1u - let createAppParams%%param_ClearStateProgramPages_idx_0#1: bytes = "\t\xc2\x81\x01" - let createAppParams%%ClearStateProgramPages_length#1: uint64 = 1u - let createAppParams%%param_ApplicationArgs_idx_0#1: bytes = "3" - let createAppParams%%param_ApplicationArgs_idx_1#1: bytes = "4" - let createAppParams%%param_ApplicationArgs_idx_2#0: bytes = "5" - let createAppParams%%ApplicationArgs_length#1: uint64 = 3u - let createAppParams%%param_Note_idx_0#1: bytes = "no args param set" - let createAppParams%%Note_length#1: uint64 = 1u - let createAppParams%%Sender_length#1: uint64 = 0u - let createAppParams%%Receiver_length#1: uint64 = 0u - let createAppParams%%Amount_length#1: uint64 = 0u - let createAppParams%%CloseRemainderTo_length#1: uint64 = 0u - let createAppParams%%VotePK_length#1: uint64 = 0u - let createAppParams%%SelectionPK_length#1: uint64 = 0u - let createAppParams%%VoteFirst_length#1: uint64 = 0u - let createAppParams%%VoteLast_length#1: uint64 = 0u - let createAppParams%%VoteKeyDilution_length#1: uint64 = 0u - let createAppParams%%Type_length#1: uint64 = 0u - let createAppParams%%XferAsset_length#1: uint64 = 0u - let createAppParams%%AssetAmount_length#1: uint64 = 0u - let createAppParams%%AssetSender_length#1: uint64 = 0u - let createAppParams%%AssetReceiver_length#1: uint64 = 0u - let createAppParams%%AssetCloseTo_length#1: uint64 = 0u - let createAppParams%%ApplicationID_length#1: uint64 = 0u - let createAppParams%%OnCompletion_length#1: uint64 = 0u - let createAppParams%%ApprovalProgram_length#1: uint64 = 0u - let createAppParams%%ClearStateProgram_length#1: uint64 = 0u - let createAppParams%%RekeyTo_length#1: uint64 = 0u - let createAppParams%%ConfigAsset_length#1: uint64 = 0u - let createAppParams%%ConfigAssetTotal_length#1: uint64 = 0u - let createAppParams%%ConfigAssetDecimals_length#1: uint64 = 0u - let createAppParams%%ConfigAssetDefaultFrozen_length#1: uint64 = 0u - let createAppParams%%ConfigAssetUnitName_length#1: uint64 = 0u - let createAppParams%%ConfigAssetName_length#1: uint64 = 0u - let createAppParams%%ConfigAssetURL_length#1: uint64 = 0u - let createAppParams%%ConfigAssetMetadataHash_length#1: uint64 = 0u - let createAppParams%%ConfigAssetManager_length#1: uint64 = 0u - let createAppParams%%ConfigAssetReserve_length#1: uint64 = 0u - let createAppParams%%ConfigAssetFreeze_length#1: uint64 = 0u - let createAppParams%%ConfigAssetClawback_length#1: uint64 = 0u - let createAppParams%%FreezeAsset_length#1: uint64 = 0u - let createAppParams%%FreezeAssetAccount_length#1: uint64 = 0u - let createAppParams%%FreezeAssetFrozen_length#1: uint64 = 0u - let createAppParams%%GlobalNumUint_length#1: uint64 = 0u - let createAppParams%%GlobalNumByteSlice_length#1: uint64 = 0u - let createAppParams%%LocalNumUint_length#1: uint64 = 0u - let createAppParams%%LocalNumByteSlice_length#1: uint64 = 0u - let createAppParams%%ExtraProgramPages_length#1: uint64 = 0u - let createAppParams%%Nonparticipation_length#1: uint64 = 0u - let createAppParams%%StateProofPK_length#1: uint64 = 0u - let createAppParams%%Accounts_length#1: uint64 = 0u - let createAppParams%%Assets_length#1: uint64 = 0u - let createAppParams%%Applications_length#1: uint64 = 0u - goto block@3 - block@3: // after_if_else_L77 - let createAppParams%%param_Note_idx_0#2: bytes = φ(createAppParams%%param_Note_idx_0#0 <- block@1, createAppParams%%param_Note_idx_0#1 <- block@2) - let createAppParams%%OnCompletion_length#2: uint64 = φ(createAppParams%%OnCompletion_length#0 <- block@1, createAppParams%%OnCompletion_length#1 <- block@2) - let createAppParams%%param_OnCompletion_idx_0#1: uint64 = φ(createAppParams%%param_OnCompletion_idx_0#0 <- block@1, createAppParams%%param_OnCompletion_idx_0#2 <- block@2) - let createAppParams%%param_ApplicationArgs_idx_0#3: bytes = φ(createAppParams%%param_ApplicationArgs_idx_0#0 <- block@1, createAppParams%%param_ApplicationArgs_idx_0#1 <- block@2) - let createAppParams%%param_ApplicationArgs_idx_1#3: bytes = φ(createAppParams%%param_ApplicationArgs_idx_1#0 <- block@1, createAppParams%%param_ApplicationArgs_idx_1#1 <- block@2) - let createAppParams%%ApplicationArgs_length#3: uint64 = φ(createAppParams%%ApplicationArgs_length#0 <- block@1, createAppParams%%ApplicationArgs_length#1 <- block@2) - let createAppParams%%param_ApplicationArgs_idx_2#2: bytes = φ(createAppParams%%param_ApplicationArgs_idx_2#3 <- block@1, createAppParams%%param_ApplicationArgs_idx_2#0 <- block@2) - let createAppParams%%param_ClearStateProgramPages_idx_0#4: bytes = φ(createAppParams%%param_ClearStateProgramPages_idx_0#0 <- block@1, createAppParams%%param_ClearStateProgramPages_idx_0#1 <- block@2) - let createAppParams%%param_ApprovalProgramPages_idx_0#4: bytes = φ(createAppParams%%param_ApprovalProgramPages_idx_0#0 <- block@1, createAppParams%%param_ApprovalProgramPages_idx_0#1 <- block@2) - let createAppParams%%param_TypeEnum_idx_0#4: uint64 = φ(createAppParams%%param_TypeEnum_idx_0#0 <- block@1, createAppParams%%param_TypeEnum_idx_0#1 <- block@2) - let createAppParams%%param_Fee_idx_0#4: uint64 = φ(createAppParams%%param_Fee_idx_0#0 <- block@1, createAppParams%%param_Fee_idx_0#1 <- block@2) - itxn_begin - ((itxn_field Note) createAppParams%%param_Note_idx_0#2) - let is_OnCompletion_count_gte_1%0#0: bool = (>= createAppParams%%OnCompletion_length#2 1u) - goto is_OnCompletion_count_gte_1%0#0 ? block@4 : block@5 - block@4: // set_OnCompletion_0_to_0_L94 - ((itxn_field OnCompletion) createAppParams%%param_OnCompletion_idx_0#1) - goto block@5 - block@5: // next_field_L94 - ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_0#3) - ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_1#3) - let is_ApplicationArgs_count_gte_3%0#0: bool = (>= createAppParams%%ApplicationArgs_length#3 3u) - goto is_ApplicationArgs_count_gte_3%0#0 ? block@6 : block@7 - block@6: // set_ApplicationArgs_2_to_2_L94 - ((itxn_field ApplicationArgs) createAppParams%%param_ApplicationArgs_idx_2#2) - goto block@7 - block@7: // next_field_L94 - ((itxn_field ClearStateProgramPages) createAppParams%%param_ClearStateProgramPages_idx_0#4) - ((itxn_field ApprovalProgramPages) createAppParams%%param_ApprovalProgramPages_idx_0#4) - ((itxn_field TypeEnum) createAppParams%%param_TypeEnum_idx_0#4) - ((itxn_field Fee) createAppParams%%param_Fee_idx_0#4) - goto block@8 - block@8: // next_txn_L94 - itxn_submit - let createAppTxn#0: itxn_group_idx = itxn_group_idx(0) - let createAppTxn._is_last#0: bool = 1u - let createAppTxn.Sender#0: bytes = itxn[createAppTxn#0].Sender - let createAppTxn.Fee#0: uint64 = itxn[createAppTxn#0].Fee - let createAppTxn.FirstValid#0: uint64 = itxn[createAppTxn#0].FirstValid - let createAppTxn.FirstValidTime#0: uint64 = itxn[createAppTxn#0].FirstValidTime - let createAppTxn.LastValid#0: uint64 = itxn[createAppTxn#0].LastValid - let createAppTxn.Note#0: bytes = itxn[createAppTxn#0].Note - let createAppTxn.Lease#0: bytes = itxn[createAppTxn#0].Lease - let createAppTxn.Receiver#0: bytes = itxn[createAppTxn#0].Receiver - let createAppTxn.Amount#0: uint64 = itxn[createAppTxn#0].Amount - let createAppTxn.CloseRemainderTo#0: bytes = itxn[createAppTxn#0].CloseRemainderTo - let createAppTxn.VotePK#0: bytes = itxn[createAppTxn#0].VotePK - let createAppTxn.SelectionPK#0: bytes = itxn[createAppTxn#0].SelectionPK - let createAppTxn.VoteFirst#0: uint64 = itxn[createAppTxn#0].VoteFirst - let createAppTxn.VoteLast#0: uint64 = itxn[createAppTxn#0].VoteLast - let createAppTxn.VoteKeyDilution#0: uint64 = itxn[createAppTxn#0].VoteKeyDilution - let createAppTxn.Type#0: bytes = itxn[createAppTxn#0].Type - let createAppTxn.TypeEnum#0: uint64 = itxn[createAppTxn#0].TypeEnum - let createAppTxn.XferAsset#0: uint64 = itxn[createAppTxn#0].XferAsset - let createAppTxn.AssetAmount#0: uint64 = itxn[createAppTxn#0].AssetAmount - let createAppTxn.AssetSender#0: bytes = itxn[createAppTxn#0].AssetSender - let createAppTxn.AssetReceiver#0: bytes = itxn[createAppTxn#0].AssetReceiver - let createAppTxn.AssetCloseTo#0: bytes = itxn[createAppTxn#0].AssetCloseTo - let createAppTxn.GroupIndex#0: uint64 = itxn[createAppTxn#0].GroupIndex - let createAppTxn.TxID#0: bytes = itxn[createAppTxn#0].TxID - let createAppTxn.ApplicationID#0: uint64 = itxn[createAppTxn#0].ApplicationID - let createAppTxn.OnCompletion#0: uint64 = itxn[createAppTxn#0].OnCompletion - let createAppTxn.NumAppArgs#0: uint64 = itxn[createAppTxn#0].NumAppArgs - let createAppTxn.NumAccounts#0: uint64 = itxn[createAppTxn#0].NumAccounts - let createAppTxn.ApprovalProgram#0: bytes = itxn[createAppTxn#0].ApprovalProgram - let createAppTxn.ClearStateProgram#0: bytes = itxn[createAppTxn#0].ClearStateProgram - let createAppTxn.RekeyTo#0: bytes = itxn[createAppTxn#0].RekeyTo - let createAppTxn.ConfigAsset#0: uint64 = itxn[createAppTxn#0].ConfigAsset - let createAppTxn.ConfigAssetTotal#0: uint64 = itxn[createAppTxn#0].ConfigAssetTotal - let createAppTxn.ConfigAssetDecimals#0: uint64 = itxn[createAppTxn#0].ConfigAssetDecimals - let createAppTxn.ConfigAssetDefaultFrozen#0: bool = itxn[createAppTxn#0].ConfigAssetDefaultFrozen - let createAppTxn.ConfigAssetUnitName#0: bytes = itxn[createAppTxn#0].ConfigAssetUnitName - let createAppTxn.ConfigAssetName#0: bytes = itxn[createAppTxn#0].ConfigAssetName - let createAppTxn.ConfigAssetURL#0: bytes = itxn[createAppTxn#0].ConfigAssetURL - let createAppTxn.ConfigAssetMetadataHash#0: bytes = itxn[createAppTxn#0].ConfigAssetMetadataHash - let createAppTxn.ConfigAssetManager#0: bytes = itxn[createAppTxn#0].ConfigAssetManager - let createAppTxn.ConfigAssetReserve#0: bytes = itxn[createAppTxn#0].ConfigAssetReserve - let createAppTxn.ConfigAssetFreeze#0: bytes = itxn[createAppTxn#0].ConfigAssetFreeze - let createAppTxn.ConfigAssetClawback#0: bytes = itxn[createAppTxn#0].ConfigAssetClawback - let createAppTxn.FreezeAsset#0: uint64 = itxn[createAppTxn#0].FreezeAsset - let createAppTxn.FreezeAssetAccount#0: bytes = itxn[createAppTxn#0].FreezeAssetAccount - let createAppTxn.FreezeAssetFrozen#0: bool = itxn[createAppTxn#0].FreezeAssetFrozen - let createAppTxn.NumAssets#0: uint64 = itxn[createAppTxn#0].NumAssets - let createAppTxn.NumApplications#0: uint64 = itxn[createAppTxn#0].NumApplications - let createAppTxn.GlobalNumUint#0: uint64 = itxn[createAppTxn#0].GlobalNumUint - let createAppTxn.GlobalNumByteSlice#0: uint64 = itxn[createAppTxn#0].GlobalNumByteSlice - let createAppTxn.LocalNumUint#0: uint64 = itxn[createAppTxn#0].LocalNumUint - let createAppTxn.LocalNumByteSlice#0: uint64 = itxn[createAppTxn#0].LocalNumByteSlice - let createAppTxn.ExtraProgramPages#0: uint64 = itxn[createAppTxn#0].ExtraProgramPages - let createAppTxn.Nonparticipation#0: bool = itxn[createAppTxn#0].Nonparticipation - let createAppTxn.NumLogs#0: uint64 = itxn[createAppTxn#0].NumLogs - let createAppTxn.CreatedAssetID#0: uint64 = itxn[createAppTxn#0].CreatedAssetID - let createAppTxn.CreatedApplicationID#0: uint64 = itxn[createAppTxn#0].CreatedApplicationID - let createAppTxn.LastLog#0: bytes = itxn[createAppTxn#0].LastLog - let createAppTxn.StateProofPK#0: bytes = itxn[createAppTxn#0].StateProofPK - let createAppTxn.NumApprovalProgramPages#0: uint64 = itxn[createAppTxn#0].NumApprovalProgramPages - let createAppTxn.NumClearStateProgramPages#0: uint64 = itxn[createAppTxn#0].NumClearStateProgramPages - let tmp%0#0: bytes = itxn[createAppTxn#0].ApplicationArgs[0u] - let tmp%1#0: bool = (== tmp%0#0 "1") - (assert tmp%1#0) // correct args used 1 - let tmp%2#0: bytes = itxn[createAppTxn#0].ApplicationArgs[1u] - let tmp%3#0: bool = (== tmp%2#0 "2") - (assert tmp%3#0) // correct args used 2 - let tmp%4#0: bool = (== createAppTxn.Note#0 "with args param set") - (assert tmp%4#0) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/jsdoc/JSDocDemo.approval.teal b/tests/approvals/out/jsdoc/JSDocDemo.approval.teal index 6e2b5d4c..148a9722 100644 --- a/tests/approvals/out/jsdoc/JSDocDemo.approval.teal +++ b/tests/approvals/out/jsdoc/JSDocDemo.approval.teal @@ -1,56 +1,41 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/jsdoc.algo.ts::JSDocDemo.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - bytecblock 0x151f7c75 0x - callsub __puya_arc4_router__ - return - + bytecblock 0x 0x151f7c75 -// tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/jsdoc.algo.ts:20 // export class JSDocDemo extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/jsdoc.algo.ts:20 + // export class JSDocDemo extends Contract { txna ApplicationArgs 0 pushbytes 0x60d93beb // method "test(uint64,byte[])(uint64)" pushbytes 0x6618726a // method "test2(byte[])(byte[])" uncover 2 - match __puya_arc4_router___test_route@2 __puya_arc4_router___test2_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_test_route@3 main_test2_route@4 -__puya_arc4_router___test_route@2: - // tests/approvals/jsdoc.algo.ts:30 - // test(a: uint64, b: bytes): DemoStruct { - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: // tests/approvals/jsdoc.algo.ts:20 // export class JSDocDemo extends Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - extract 2 0 - // tests/approvals/jsdoc.algo.ts:30 - // test(a: uint64, b: bytes): DemoStruct { - callsub test - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - retsub + intc_0 // 0 + +main_after_inlined_tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__@12: + return -__puya_arc4_router___test2_route@3: +main_test2_route@4: // tests/approvals/jsdoc.algo.ts:39 // test2(a: bytes): DemoType { txn OnCompletion @@ -77,31 +62,59 @@ __puya_arc4_router___test2_route@3: pushint 2 // 2 itob extract 6 2 - bytec_1 // 0x + bytec_0 // 0x swap concat swap concat - bytec_0 // 0x151f7c75 + bytec_1 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__@12 -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 +main_test_route@3: + // tests/approvals/jsdoc.algo.ts:30 + // test(a: uint64, b: bytes): DemoStruct { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + // tests/approvals/jsdoc.algo.ts:20 + // export class JSDocDemo extends Contract { + txna ApplicationArgs 1 + btoi + txna ApplicationArgs 2 + extract 2 0 + // tests/approvals/jsdoc.algo.ts:30 + // test(a: uint64, b: bytes): DemoStruct { + callsub test + bytec_1 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/jsdoc.algo.ts:20 // export class JSDocDemo extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 + +main_switch_case_default@9: -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/jsdoc.algo.ts:20 // export class JSDocDemo extends Contract { txn ApplicationID @@ -110,15 +123,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/jsdoc.algo.ts:20 - // export class JSDocDemo extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__@12 // tests/approvals/jsdoc.algo.ts::JSDocDemo.test(a: uint64, b: bytes) -> bytes: @@ -130,7 +135,7 @@ test: // return new DemoStruct({ a: new UintN<64>(a) }) frame_dig -2 itob - bytec_1 // 0x + bytec_0 // 0x swap concat retsub diff --git a/tests/approvals/out/jsdoc/JSDocDemo.arc32.json b/tests/approvals/out/jsdoc/JSDocDemo.arc32.json index 6464e187..773e9f96 100644 --- a/tests/approvals/out/jsdoc/JSDocDemo.arc32.json +++ b/tests/approvals/out/jsdoc/JSDocDemo.arc32.json @@ -34,8 +34,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweAogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDYwZDkzYmViIC8vIG1ldGhvZCAidGVzdCh1aW50NjQsYnl0ZVtdKSh1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4NjYxODcyNmEgLy8gbWV0aG9kICJ0ZXN0MihieXRlW10pKGJ5dGVbXSkiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0Ml9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzAKICAgIC8vIHRlc3QoYTogdWludDY0LCBiOiBieXRlcyk6IERlbW9TdHJ1Y3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzAKICAgIC8vIHRlc3QoYTogdWludDY0LCBiOiBieXRlcyk6IERlbW9TdHJ1Y3QgewogICAgY2FsbHN1YiB0ZXN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0Ml9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgY2FsbHN1YiB0ZXN0MgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8udGVzdChhOiB1aW50NjQsIGI6IGJ5dGVzKSAtPiBieXRlczoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBuZXcgRGVtb1N0cnVjdCh7IGE6IG5ldyBVaW50Tjw2ND4oYSkgfSkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLnRlc3QyKGE6IGJ5dGVzKSAtPiBieXRlczoKdGVzdDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czozOQogICAgLy8gdGVzdDIoYTogYnl0ZXMpOiBEZW1vVHlwZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjQwLTQyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBhLAogICAgLy8gfQogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg2MGQ5M2JlYiAvLyBtZXRob2QgInRlc3QodWludDY0LGJ5dGVbXSkodWludDY0KSIKICAgIHB1c2hieXRlcyAweDY2MTg3MjZhIC8vIG1ldGhvZCAidGVzdDIoYnl0ZVtdKShieXRlW10pIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMyBtYWluX3Rlc3QyX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl90ZXN0Ml9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgY2FsbHN1YiB0ZXN0MgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3Rlc3Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIGNhbGxzdWIgdGVzdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLnRlc3QoYTogdWludDY0LCBiOiBieXRlcykgLT4gYnl0ZXM6CnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czozMAogICAgLy8gdGVzdChhOiB1aW50NjQsIGI6IGJ5dGVzKTogRGVtb1N0cnVjdCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gbmV3IERlbW9TdHJ1Y3QoeyBhOiBuZXcgVWludE48NjQ+KGEpIH0pCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby50ZXN0MihhOiBieXRlcykgLT4gYnl0ZXM6CnRlc3QyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo0MC00MgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYSwKICAgIC8vIH0KICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/jsdoc/JSDocDemo.arc56.json b/tests/approvals/out/jsdoc/JSDocDemo.arc56.json index fb55696c..e2db61de 100644 --- a/tests/approvals/out/jsdoc/JSDocDemo.arc56.json +++ b/tests/approvals/out/jsdoc/JSDocDemo.arc56.json @@ -122,21 +122,21 @@ "sourceInfo": [ { "pc": [ - 57, - 86 + 49, + 95 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 144 + 137 ], "errorMessage": "can only call when creating" }, { "pc": [ - 62, - 91 + 54, + 100 ], "errorMessage": "can only call when not creating" } @@ -149,8 +149,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweAogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDYwZDkzYmViIC8vIG1ldGhvZCAidGVzdCh1aW50NjQsYnl0ZVtdKSh1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4NjYxODcyNmEgLy8gbWV0aG9kICJ0ZXN0MihieXRlW10pKGJ5dGVbXSkiCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0Ml9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzAKICAgIC8vIHRlc3QoYTogdWludDY0LCBiOiBieXRlcyk6IERlbW9TdHJ1Y3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzAKICAgIC8vIHRlc3QoYTogdWludDY0LCBiOiBieXRlcyk6IERlbW9TdHJ1Y3QgewogICAgY2FsbHN1YiB0ZXN0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0Ml9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgY2FsbHN1YiB0ZXN0MgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8udGVzdChhOiB1aW50NjQsIGI6IGJ5dGVzKSAtPiBieXRlczoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBuZXcgRGVtb1N0cnVjdCh7IGE6IG5ldyBVaW50Tjw2ND4oYSkgfSkKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLnRlc3QyKGE6IGJ5dGVzKSAtPiBieXRlczoKdGVzdDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czozOQogICAgLy8gdGVzdDIoYTogYnl0ZXMpOiBEZW1vVHlwZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjQwLTQyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBhLAogICAgLy8gfQogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4IDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg2MGQ5M2JlYiAvLyBtZXRob2QgInRlc3QodWludDY0LGJ5dGVbXSkodWludDY0KSIKICAgIHB1c2hieXRlcyAweDY2MTg3MjZhIC8vIG1ldGhvZCAidGVzdDIoYnl0ZVtdKShieXRlW10pIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX3Rlc3Rfcm91dGVAMyBtYWluX3Rlc3QyX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl90ZXN0Ml9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgY2FsbHN1YiB0ZXN0MgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX3Rlc3Rfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjIwCiAgICAvLyBleHBvcnQgY2xhc3MgSlNEb2NEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMwCiAgICAvLyB0ZXN0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpOiBEZW1vU3RydWN0IHsKICAgIGNhbGxzdWIgdGVzdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBKU0RvY0RlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjpKU0RvY0RlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo6SlNEb2NEZW1vLnRlc3QoYTogdWludDY0LCBiOiBieXRlcykgLT4gYnl0ZXM6CnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czozMAogICAgLy8gdGVzdChhOiB1aW50NjQsIGI6IGJ5dGVzKTogRGVtb1N0cnVjdCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9qc2RvYy5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gbmV3IERlbW9TdHJ1Y3QoeyBhOiBuZXcgVWludE48NjQ+KGEpIH0pCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby50ZXN0MihhOiBieXRlcykgLT4gYnl0ZXM6CnRlc3QyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6MzkKICAgIC8vIHRlc3QyKGE6IGJ5dGVzKTogRGVtb1R5cGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czo0MC00MgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgYSwKICAgIC8vIH0KICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2pzZG9jLmFsZ28udHM6OkpTRG9jRGVtby5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvanNkb2MuYWxnby50czoyMAogICAgLy8gZXhwb3J0IGNsYXNzIEpTRG9jRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAgAEFR98dTEbIhNBAGY2GgCABGDZO+uABGYYcmpPAo4CADAAAiJDMRkiEkQxGCITRDYaAVcCAIgAW0kVFlcGAkxQgQIWVwYCKExQTFApTFCwI0L/0TEZIhJEMRgiE0Q2GgEXNhoCVwIAiAAfKUxQsCNC/7IxGSJMjgEAA0L/pjEYIhJEiAAUI0L/m4oCAYv+FihMUImKAQGL/4mKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/jsdoc/JSDocDemo.clear.teal b/tests/approvals/out/jsdoc/JSDocDemo.clear.teal index 8054cedd..a4d58047 100644 --- a/tests/approvals/out/jsdoc/JSDocDemo.clear.teal +++ b/tests/approvals/out/jsdoc/JSDocDemo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/jsdoc.algo.ts::JSDocDemo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.approval.0.ssa.ir b/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.approval.0.ssa.ir new file mode 100644 index 00000000..d3dee316 --- /dev/null +++ b/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.approval.0.ssa.ir @@ -0,0 +1,88 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__() -> bool: + block@0: // L20 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L20 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test(uint64,byte[])(uint64)" => block@2, method "test2(byte[])(byte[])" => block@3, * => block@4} + block@2: // test_route_L30 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + let tmp%9#0: bytes = (txna ApplicationArgs 2) + let tmp%10#0: bytes = ((extract 2 0) tmp%9#0) + let tmp%11#0: bytes = tests/approvals/jsdoc.algo.ts::JSDocDemo.test(tmp%8#0, tmp%10#0) + let tmp%12#0: bytes = (concat 0x151f7c75 tmp%11#0) + (log tmp%12#0) + return 1u + block@3: // test2_route_L39 + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 NoOp) + (assert tmp%14#0) // OnCompletion is not NoOp + let tmp%15#0: uint64 = (txn ApplicationID) + let tmp%16#0: bool = (!= tmp%15#0 0u) + (assert tmp%16#0) // can only call when not creating + let tmp%17#0: bytes = (txna ApplicationArgs 1) + let tmp%18#0: bytes = ((extract 2 0) tmp%17#0) + let elements_to_encode%0#0: bytes = tests/approvals/jsdoc.algo.ts::JSDocDemo.test2(tmp%18#0) + let length%0#0: uint64 = (len elements_to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%0#0) + let current_tail_offset%0#0: uint64 = 2u + let encoded_tuple_buffer%0#0: bytes = 0x + let as_bytes%1#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 encoded_value%0#0) + let tmp%19#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%2#0) + (log tmp%19#0) + return 1u + block@4: // switch_case_default_L20 + goto block@5 + block@5: // switch_case_next_L20 + goto block@10 + block@6: // bare_routing_L20 + let tmp%20#0: uint64 = (txn OnCompletion) + switch tmp%20#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L20 + let tmp%21#0: uint64 = (txn ApplicationID) + let tmp%22#0: bool = (== tmp%21#0 0u) + (assert tmp%22#0) // can only call when creating + tests/approvals/jsdoc.algo.ts::JSDocDemo.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L20 + goto block@9 + block@9: // switch_case_next_L20 + goto block@10 + block@10: // after_if_else_L20 + return 0u + +subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.test(a: uint64, b: bytes) -> bytes: + block@0: // L30 + let val_as_bytes%0#0: bytes = (itob a#0) + let current_tail_offset%0#0: uint64 = 8u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + return encoded_tuple_buffer%1#0 + +subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.test2(a: bytes) -> bytes: + block@0: // L39 + return a#0 + +subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.__algots__.defaultCreate() -> void: + block@0: // L20 + return \ No newline at end of file diff --git a/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.clear.0.ssa.ir b/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/jsdoc/JSDocDemo.ir/JSDocDemo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/jsdoc/JSDocDemo.ssa.ir b/tests/approvals/out/jsdoc/JSDocDemo.ssa.ir deleted file mode 100644 index a2574cc5..00000000 --- a/tests/approvals/out/jsdoc/JSDocDemo.ssa.ir +++ /dev/null @@ -1,95 +0,0 @@ -contract tests/approvals/jsdoc.algo.ts::JSDocDemo: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.__puya_arc4_router__() -> bool: - block@0: // L20 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L20 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "test(uint64,byte[])(uint64)" => block@2, method "test2(byte[])(byte[])" => block@3, * => block@4} - block@2: // test_route_L30 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - let tmp%9#0: bytes = (txna ApplicationArgs 2) - let tmp%10#0: bytes = ((extract 2 0) tmp%9#0) - let tmp%11#0: bytes = tests/approvals/jsdoc.algo.ts::JSDocDemo.test(tmp%8#0, tmp%10#0) - let tmp%12#0: bytes = (concat 0x151f7c75 tmp%11#0) - (log tmp%12#0) - return 1u - block@3: // test2_route_L39 - let tmp%13#0: uint64 = (txn OnCompletion) - let tmp%14#0: bool = (== tmp%13#0 NoOp) - (assert tmp%14#0) // OnCompletion is not NoOp - let tmp%15#0: uint64 = (txn ApplicationID) - let tmp%16#0: bool = (!= tmp%15#0 0u) - (assert tmp%16#0) // can only call when not creating - let tmp%17#0: bytes = (txna ApplicationArgs 1) - let tmp%18#0: bytes = ((extract 2 0) tmp%17#0) - let elements_to_encode%0#0: bytes = tests/approvals/jsdoc.algo.ts::JSDocDemo.test2(tmp%18#0) - let length%0#0: uint64 = (len elements_to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%0#0) - let current_tail_offset%0#0: uint64 = 2u - let encoded_tuple_buffer%0#0: bytes = 0x - let as_bytes%1#0: bytes = (itob current_tail_offset%0#0) - let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 offset_as_uint16%0#0) - let data_length%0#0: uint64 = (len encoded_value%0#0) - let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 encoded_value%0#0) - let tmp%19#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%2#0) - (log tmp%19#0) - return 1u - block@4: // switch_case_default_L20 - goto block@5 - block@5: // switch_case_next_L20 - goto block@10 - block@6: // bare_routing_L20 - let tmp%20#0: uint64 = (txn OnCompletion) - switch tmp%20#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L20 - let tmp%21#0: uint64 = (txn ApplicationID) - let tmp%22#0: bool = (== tmp%21#0 0u) - (assert tmp%22#0) // can only call when creating - tests/approvals/jsdoc.algo.ts::JSDocDemo.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L20 - goto block@9 - block@9: // switch_case_next_L20 - goto block@10 - block@10: // after_if_else_L20 - return 0u - - subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.test(a: uint64, b: bytes) -> bytes: - block@0: // L30 - let val_as_bytes%0#0: bytes = (itob a#0) - let current_tail_offset%0#0: uint64 = 8u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - return encoded_tuple_buffer%1#0 - - subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.test2(a: bytes) -> bytes: - block@0: // L39 - return a#0 - - subroutine tests/approvals/jsdoc.algo.ts::JSDocDemo.__algots__.defaultCreate() -> void: - block@0: // L20 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/local-state/LocalStateDemo.approval.teal b/tests/approvals/out/local-state/LocalStateDemo.approval.teal index f1e1d58d..f72a69a5 100644 --- a/tests/approvals/out/local-state/LocalStateDemo.approval.teal +++ b/tests/approvals/out/local-state/LocalStateDemo.approval.teal @@ -1,32 +1,44 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/local-state.algo.ts::LocalStateDemo.approvalProgram: - intcblock 0 1 8 100 +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 1 100 8 bytecblock "l1" "localUint2" "b1" "localBytes2" "localEncoded" - callsub __puya_arc4_router__ - return - -// tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/local-state.algo.ts:7 // export class LocalStateDemo extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@7 + bz main_bare_routing@8 + +main_abi_routing@2: + // tests/approvals/local-state.algo.ts:7 + // export class LocalStateDemo extends Contract { txna ApplicationArgs 0 pushbytes 0xaaefcb43 // method "setState((uint64,byte[]),uint64[10])void" pushbytes 0x67816cc5 // method "getState()(uint64,uint64,byte[],byte[],uint64[10])" pushbytes 0x11170534 // method "clearState()void" uncover 3 - match __puya_arc4_router___setState_route@2 __puya_arc4_router___getState_route@3 __puya_arc4_router___clearState_route@4 - b __puya_arc4_router___switch_case_default@5 + match main_setState_route@3 main_getState_route@4 main_clearState_route@5 -__puya_arc4_router___setState_route@2: - // tests/approvals/local-state.algo.ts:14 - // public setState({ a, b }: { a: uint64; b: bytes }, c: SampleArray) { +main_switch_case_default@6: + +main_switch_case_next@7: + +main_after_if_else@12: + // tests/approvals/local-state.algo.ts:7 + // export class LocalStateDemo extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__@13: + return + +main_clearState_route@5: + // tests/approvals/local-state.algo.ts:32 + // public clearState() { txn OnCompletion intc_0 // NoOp == @@ -35,37 +47,11 @@ __puya_arc4_router___setState_route@2: intc_0 // 0 != assert // can only call when not creating - // tests/approvals/local-state.algo.ts:7 - // export class LocalStateDemo extends Contract { - txna ApplicationArgs 1 - dup - intc_0 // 0 - intc_2 // 8 - extract3 // on error: Index access is out of bounds - btoi - swap - dup - intc_2 // 8 - extract_uint16 - swap - dup - len - swap - uncover 2 - uncover 2 - substring3 - extract 2 0 - txna ApplicationArgs 2 - // tests/approvals/local-state.algo.ts:14 - // public setState({ a, b }: { a: uint64; b: bytes }, c: SampleArray) { - uncover 2 - uncover 2 - uncover 2 - callsub setState + callsub clearState intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__@13 -__puya_arc4_router___getState_route@3: +main_getState_route@4: // tests/approvals/local-state.algo.ts:22 // public getState() { txn OnCompletion @@ -104,13 +90,13 @@ __puya_arc4_router___getState_route@3: concat swap concat - intc_3 // 100 + intc_2 // 100 itob extract 6 2 concat dig 1 len - intc_3 // 100 + intc_2 // 100 + itob extract 6 2 @@ -126,11 +112,11 @@ __puya_arc4_router___getState_route@3: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__@13 -__puya_arc4_router___clearState_route@4: - // tests/approvals/local-state.algo.ts:32 - // public clearState() { +main_setState_route@3: + // tests/approvals/local-state.algo.ts:14 + // public setState({ a, b }: { a: uint64; b: bytes }, c: SampleArray) { txn OnCompletion intc_0 // NoOp == @@ -139,23 +125,50 @@ __puya_arc4_router___clearState_route@4: intc_0 // 0 != assert // can only call when not creating - callsub clearState + // tests/approvals/local-state.algo.ts:7 + // export class LocalStateDemo extends Contract { + txna ApplicationArgs 1 + dup + intc_0 // 0 + intc_3 // 8 + extract3 // on error: Index access is out of bounds + btoi + swap + dup + intc_3 // 8 + extract_uint16 + swap + dup + len + swap + uncover 2 + uncover 2 + substring3 + extract 2 0 + txna ApplicationArgs 2 + // tests/approvals/local-state.algo.ts:14 + // public setState({ a, b }: { a: uint64; b: bytes }, c: SampleArray) { + uncover 2 + uncover 2 + uncover 2 + callsub setState intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@5: - b __puya_arc4_router___after_if_else@11 - -__puya_arc4_router___bare_routing@7: +main_bare_routing@8: // tests/approvals/local-state.algo.ts:7 // export class LocalStateDemo extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@8 - b __puya_arc4_router___switch_case_default@9 + match main___algots__.defaultCreate@9 + +main_switch_case_default@10: + +main_switch_case_next@11: + b main_after_if_else@12 -__puya_arc4_router_____algots__.defaultCreate@8: +main___algots__.defaultCreate@9: // tests/approvals/local-state.algo.ts:7 // export class LocalStateDemo extends Contract { txn ApplicationID @@ -164,15 +177,7 @@ __puya_arc4_router_____algots__.defaultCreate@8: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@9: - -__puya_arc4_router___after_if_else@11: - // tests/approvals/local-state.algo.ts:7 - // export class LocalStateDemo extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__@13 // tests/approvals/local-state.algo.ts::LocalStateDemo.setState(p.a: uint64, p.b: bytes, c: bytes) -> void: diff --git a/tests/approvals/out/local-state/LocalStateDemo.arc32.json b/tests/approvals/out/local-state/LocalStateDemo.arc32.json index 90339c55..0bdc8a23 100644 --- a/tests/approvals/out/local-state/LocalStateDemo.arc32.json +++ b/tests/approvals/out/local-state/LocalStateDemo.arc32.json @@ -59,8 +59,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMSA4IDEwMAogICAgYnl0ZWNibG9jayAibDEiICJsb2NhbFVpbnQyIiAiYjEiICJsb2NhbEJ5dGVzMiIgImxvY2FsRW5jb2RlZCIKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A3CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhhYWVmY2I0MyAvLyBtZXRob2QgInNldFN0YXRlKCh1aW50NjQsYnl0ZVtdKSx1aW50NjRbMTBdKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2NzgxNmNjNSAvLyBtZXRob2QgImdldFN0YXRlKCkodWludDY0LHVpbnQ2NCxieXRlW10sYnl0ZVtdLHVpbnQ2NFsxMF0pIgogICAgcHVzaGJ5dGVzIDB4MTExNzA1MzQgLy8gbWV0aG9kICJjbGVhclN0YXRlKCl2b2lkIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFN0YXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fY2xlYXJTdGF0ZV9yb3V0ZUA0CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0U3RhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0U3RhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0YXRlCiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb3ZlciAzCiAgICBpdG9iCiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDMKICAgIHB1c2hieXRlcyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxMDAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMyAvLyAxMDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jbGVhclN0YXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMgogICAgLy8gcHVibGljIGNsZWFyU3RhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsZWFyU3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5zZXRTdGF0ZShwLmE6IHVpbnQ2NCwgcC5iOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTQKICAgIC8vIHB1YmxpYyBzZXRTdGF0ZSh7IGEsIGIgfTogeyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0sIGM6IFNhbXBsZUFycmF5KSB7CiAgICBwcm90byAzIDAKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTUKICAgIC8vIHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlID0gYQogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNgogICAgLy8gdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlID0gYQogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNwogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNwogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxOAogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSA9IGIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlID0gYy5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZSA9IGMuY29weSgpCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5nZXRTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIGJ5dGVzOgpnZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0U3RhdGUoKSB7CiAgICBwcm90byAwIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEyCiAgICAvLyBsb2NhbEVuY29kZWQgPSBMb2NhbFN0YXRlPFNhbXBsZUFycmF5PigpCiAgICBieXRlYyA0IC8vICJsb2NhbEVuY29kZWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjMtMjkKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICAvLyB9CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmNsZWFyU3RhdGUoKSAtPiB2b2lkOgpjbGVhclN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyBjbGVhclN0YXRlKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMwogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMwogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzYKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzYKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwMCA4CiAgICBieXRlY2Jsb2NrICJsMSIgImxvY2FsVWludDIiICJiMSIgImxvY2FsQnl0ZXMyIiAibG9jYWxFbmNvZGVkIgoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YWFlZmNiNDMgLy8gbWV0aG9kICJzZXRTdGF0ZSgodWludDY0LGJ5dGVbXSksdWludDY0WzEwXSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4Njc4MTZjYzUgLy8gbWV0aG9kICJnZXRTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLGJ5dGVbXSx1aW50NjRbMTBdKSIKICAgIHB1c2hieXRlcyAweDExMTcwNTM0IC8vIG1ldGhvZCAiY2xlYXJTdGF0ZSgpdm9pZCIKICAgIHVuY292ZXIgMwogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUAzIG1haW5fZ2V0U3RhdGVfcm91dGVANCBtYWluX2NsZWFyU3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX2NsZWFyU3RhdGVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgY2xlYXJTdGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xlYXJTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9nZXRTdGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRTdGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0U3RhdGUKICAgIGNvdmVyIDQKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvdmVyIDMKICAgIGl0b2IKICAgIGNvdmVyIDMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgcHVzaGJ5dGVzIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgaW50Y18yIC8vIDEwMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDEwMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fc2V0U3RhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlKHAuYTogdWludDY0LCBwLmI6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNAogICAgLy8gcHVibGljIHNldFN0YXRlKHsgYSwgYiB9OiB7IGE6IHVpbnQ2NDsgYjogYnl0ZXMgfSwgYzogU2FtcGxlQXJyYXkpIHsKICAgIHByb3RvIDMgMAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE1CiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTYKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE3CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE3CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxOQogICAgLy8gdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUgPSBjLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlID0gYy5jb3B5KCkKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmdldFN0YXRlKCkgLT4gdWludDY0LCB1aW50NjQsIGJ5dGVzLCBieXRlcywgYnl0ZXM6CmdldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRTdGF0ZSgpIHsKICAgIHByb3RvIDAgNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEyCiAgICAvLyBsb2NhbEVuY29kZWQgPSBMb2NhbFN0YXRlPFNhbXBsZUFycmF5PigpCiAgICBieXRlYyA0IC8vICJsb2NhbEVuY29kZWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyMy0yOQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uY2xlYXJTdGF0ZSgpIC0+IHZvaWQ6CmNsZWFyU3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMgogICAgLy8gcHVibGljIGNsZWFyU3RhdGUoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzQKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzQKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNQogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzcKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzcKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICBhcHBfbG9jYWxfZGVsCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/local-state/LocalStateDemo.arc56.json b/tests/approvals/out/local-state/LocalStateDemo.arc56.json index a7d78d38..0a689573 100644 --- a/tests/approvals/out/local-state/LocalStateDemo.arc56.json +++ b/tests/approvals/out/local-state/LocalStateDemo.arc56.json @@ -159,59 +159,59 @@ "sourceInfo": [ { "pc": [ - 115 + 212 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ - 103, - 151, - 237 + 95, + 112, + 200 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 266 + 261 ], "errorMessage": "can only call when creating" }, { "pc": [ - 108, - 156, - 242 + 100, + 117, + 205 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 324, - 332, - 340, - 348, - 357, - 365, - 371, - 379, - 387, - 396, - 404, - 412, - 418, - 426, - 435, - 443, - 451, - 459, - 465, - 474, - 482, - 490, - 498, - 506, - 513 + 319, + 327, + 335, + 343, + 352, + 360, + 366, + 374, + 382, + 391, + 399, + 407, + 413, + 421, + 430, + 438, + 446, + 454, + 460, + 469, + 477, + 485, + 493, + 501, + 508 ], "errorMessage": "check LocalState exists" } @@ -224,8 +224,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMSA4IDEwMAogICAgYnl0ZWNibG9jayAibDEiICJsb2NhbFVpbnQyIiAiYjEiICJsb2NhbEJ5dGVzMiIgImxvY2FsRW5jb2RlZCIKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A3CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhhYWVmY2I0MyAvLyBtZXRob2QgInNldFN0YXRlKCh1aW50NjQsYnl0ZVtdKSx1aW50NjRbMTBdKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg2NzgxNmNjNSAvLyBtZXRob2QgImdldFN0YXRlKCkodWludDY0LHVpbnQ2NCxieXRlW10sYnl0ZVtdLHVpbnQ2NFsxMF0pIgogICAgcHVzaGJ5dGVzIDB4MTExNzA1MzQgLy8gbWV0aG9kICJjbGVhclN0YXRlKCl2b2lkIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFN0YXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fY2xlYXJTdGF0ZV9yb3V0ZUA0CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANQoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0U3RhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0U3RhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0YXRlCiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb3ZlciAzCiAgICBpdG9iCiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDMKICAgIHB1c2hieXRlcyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxMDAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMyAvLyAxMDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jbGVhclN0YXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMgogICAgLy8gcHVibGljIGNsZWFyU3RhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsZWFyU3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANToKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDgKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5zZXRTdGF0ZShwLmE6IHVpbnQ2NCwgcC5iOiBieXRlcywgYzogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTQKICAgIC8vIHB1YmxpYyBzZXRTdGF0ZSh7IGEsIGIgfTogeyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0sIGM6IFNhbXBsZUFycmF5KSB7CiAgICBwcm90byAzIDAKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTUKICAgIC8vIHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlID0gYQogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNgogICAgLy8gdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlID0gYQogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNwogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNwogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxOAogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSA9IGIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlID0gYy5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZSA9IGMuY29weSgpCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5nZXRTdGF0ZSgpIC0+IHVpbnQ2NCwgdWludDY0LCBieXRlcywgYnl0ZXMsIGJ5dGVzOgpnZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0U3RhdGUoKSB7CiAgICBwcm90byAwIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEyCiAgICAvLyBsb2NhbEVuY29kZWQgPSBMb2NhbFN0YXRlPFNhbXBsZUFycmF5PigpCiAgICBieXRlYyA0IC8vICJsb2NhbEVuY29kZWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjMtMjkKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICAvLyB9CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmNsZWFyU3RhdGUoKSAtPiB2b2lkOgpjbGVhclN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyBjbGVhclN0YXRlKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMwogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMwogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM0CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzYKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzYKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwMCA4CiAgICBieXRlY2Jsb2NrICJsMSIgImxvY2FsVWludDIiICJiMSIgImxvY2FsQnl0ZXMyIiAibG9jYWxFbmNvZGVkIgoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YWFlZmNiNDMgLy8gbWV0aG9kICJzZXRTdGF0ZSgodWludDY0LGJ5dGVbXSksdWludDY0WzEwXSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4Njc4MTZjYzUgLy8gbWV0aG9kICJnZXRTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLGJ5dGVbXSx1aW50NjRbMTBdKSIKICAgIHB1c2hieXRlcyAweDExMTcwNTM0IC8vIG1ldGhvZCAiY2xlYXJTdGF0ZSgpdm9pZCIKICAgIHVuY292ZXIgMwogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUAzIG1haW5fZ2V0U3RhdGVfcm91dGVANCBtYWluX2NsZWFyU3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX2NsZWFyU3RhdGVfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgY2xlYXJTdGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xlYXJTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9nZXRTdGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRTdGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0U3RhdGUKICAgIGNvdmVyIDQKICAgIGNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvdmVyIDMKICAgIGl0b2IKICAgIGNvdmVyIDMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciAzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMwogICAgcHVzaGJ5dGVzIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgaW50Y18yIC8vIDEwMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDEwMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fc2V0U3RhdGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBwdWJsaWMgc2V0U3RhdGUoeyBhLCBiIH06IHsgYTogdWludDY0OyBiOiBieXRlcyB9LCBjOiBTYW1wbGVBcnJheSkgewogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlKHAuYTogdWludDY0LCBwLmI6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNAogICAgLy8gcHVibGljIHNldFN0YXRlKHsgYSwgYiB9OiB7IGE6IHVpbnQ2NDsgYjogYnl0ZXMgfSwgYzogU2FtcGxlQXJyYXkpIHsKICAgIHByb3RvIDMgMAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE1CiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTYKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE2CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE3CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE3CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxOQogICAgLy8gdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUgPSBjLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlID0gYy5jb3B5KCkKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmdldFN0YXRlKCkgLT4gdWludDY0LCB1aW50NjQsIGJ5dGVzLCBieXRlcywgYnl0ZXM6CmdldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRTdGF0ZSgpIHsKICAgIHByb3RvIDAgNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlY18zIC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTIKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDQgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBsb2NhbFVpbnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6ICdsMScgfSkKICAgIGJ5dGVjXzAgLy8gImwxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5CiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzEgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEyCiAgICAvLyBsb2NhbEVuY29kZWQgPSBMb2NhbFN0YXRlPFNhbXBsZUFycmF5PigpCiAgICBieXRlYyA0IC8vICJsb2NhbEVuY29kZWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gbG9jYWxFbmNvZGVkOiB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZS5jb3B5KCksCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjQKICAgIC8vIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNgogICAgLy8gbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjXzIgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gbG9jYWxCeXRlczI6IHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMCAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNQogICAgLy8gbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMSAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyBsb2NhbFVpbnQyOiB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlY18yIC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjgKICAgIC8vIGxvY2FsRW5jb2RlZDogdGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUuY29weSgpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyMy0yOQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxVaW50MjogdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsQnl0ZXMyOiB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEVuY29kZWQ6IHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlLmNvcHkoKSwKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uY2xlYXJTdGF0ZSgpIC0+IHZvaWQ6CmNsZWFyU3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMgogICAgLy8gcHVibGljIGNsZWFyU3RhdGUoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18wIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjMzCiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzQKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18xIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzQKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsQnl0ZXMgPSBMb2NhbFN0YXRlPGJ5dGVzPih7IGtleTogJ2IxJyB9KQogICAgYnl0ZWNfMiAvLyAiYjEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNQogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTEKICAgIC8vIGxvY2FsQnl0ZXMyID0gTG9jYWxTdGF0ZTxieXRlcz4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxCeXRlczIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzcKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNCAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzcKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICBhcHBfbG9jYWxfZGVsCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiAEAAFkCCYFAmwxCmxvY2FsVWludDICYjELbG9jYWxCeXRlczIMbG9jYWxFbmNvZGVkMRsiE0EAvDYaAIAEqu/LQ4AEZ4FsxYAEERcFNE8DjgMAawATAAIiQzEZIhJEMRgiE0SIAaAjQv/uMRkiEkQxGCITRIgAvk4ETgNOAkwWTgMWTgNJFRZXBgJMUE4DSRUWVwYCTFBOA4AATFBMUCQWVwYCUEsBFSQIFlcGAlBPA1BMUExQgAQVH3x1TFCwI0L/ljEZIhJEMRgiE0Q2GgFJIiVYF0xJJVlMSRVMTwJPAlJXAgA2GgJPAk8CTwKIABsjQv9kMRkiTI4BAANC/1gxGCISRIgBGCNC/02KAwCL/Yv+TDEAKEsCZjEAKU8CZjEAKksCZjEAK08CZov/MQAnBE8CZomKAAUxACIoY0QxACIpY0UBRDEAIipjRQFEMQAiK2NFAUQxACInBGNFAUQxACIoY0UBRDEAIiljRDEAIipjRQFEMQAiK2NFAUQxACInBGNFAUQxACIoY0UBRDEAIiljRQFEMQAiKmNEMQAiK2NFAUQxACInBGNFAUQxACIoY0UBRDEAIiljRQFEMQAiKmNFAUQxACIrY0QxACInBGNFAUQxACIoY0UBRDEAIiljRQFEMQAiKmNFAUQxACIrY0UBRDEAIicEY0RPBE8ETwRPBE8EiYoAADEAKGgxACloMQAqaDEAK2gxACcEaImKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/local-state/LocalStateDemo.clear.teal b/tests/approvals/out/local-state/LocalStateDemo.clear.teal index 1f872c5f..a4d58047 100644 --- a/tests/approvals/out/local-state/LocalStateDemo.clear.teal +++ b/tests/approvals/out/local-state/LocalStateDemo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/local-state.algo.ts::LocalStateDemo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.approval.0.ssa.ir b/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.approval.0.ssa.ir new file mode 100644 index 00000000..544af378 --- /dev/null +++ b/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.approval.0.ssa.ir @@ -0,0 +1,215 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__() -> bool: + block@0: // L7 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@7 + block@1: // abi_routing_L7 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "setState((uint64,byte[]),uint64[10])void" => block@2, method "getState()(uint64,uint64,byte[],byte[],uint64[10])" => block@3, method "clearState()void" => block@4, * => block@5} + block@2: // setState_route_L14 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let item0%0#0: bytes = (extract3 tmp%7#0 0u 8u) // on error: Index access is out of bounds + let item0%0%0#0: uint64 = (btoi item0%0#0) + let item_start_offset%0#0: uint64 = (extract_uint16 tmp%7#0 8u) + let item_end_offset%0#0: uint64 = (len tmp%7#0) + let item1%0#0: bytes = (substring3 tmp%7#0 item_start_offset%0#0 item_end_offset%0#0) + let item1%0%0#0: bytes = ((extract 2 0) item1%0#0) + let tmp%8#0: bytes = (txna ApplicationArgs 2) + tests/approvals/local-state.algo.ts::LocalStateDemo.setState(item0%0%0#0, item1%0%0#0, tmp%8#0) + return 1u + block@3: // getState_route_L22 + let tmp%9#0: uint64 = (txn OnCompletion) + let tmp%10#0: bool = (== tmp%9#0 NoOp) + (assert tmp%10#0) // OnCompletion is not NoOp + let tmp%11#0: uint64 = (txn ApplicationID) + let tmp%12#0: bool = (!= tmp%11#0 0u) + (assert tmp%12#0) // can only call when not creating + let (elements_to_encode%0#0: uint64, elements_to_encode%1#0: uint64, elements_to_encode%2#0: bytes, elements_to_encode%3#0: bytes, elements_to_encode%4#0: bytes) = tests/approvals/local-state.algo.ts::LocalStateDemo.getState() + let val_as_bytes%0#0: bytes = (itob elements_to_encode%0#0) + let val_as_bytes%1#0: bytes = (itob elements_to_encode%1#0) + let length%0#0: uint64 = (len elements_to_encode%2#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%2#0) + let length%1#0: uint64 = (len elements_to_encode%3#0) + let as_bytes%1#0: bytes = (itob length%1#0) + let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 elements_to_encode%3#0) + let current_tail_offset%0#0: uint64 = 100u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) + let as_bytes%2#0: bytes = (itob current_tail_offset%0#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) + let as_bytes%3#0: bytes = (itob current_tail_offset%1#0) + let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%3#0) + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 offset_as_uint16%1#0) + let data_length%1#0: uint64 = (len encoded_value%1#0) + let current_tail_offset%2#0: uint64 = (+ current_tail_offset%1#0 data_length%1#0) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 elements_to_encode%4#0) + let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%0#0) + let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 encoded_value%1#0) + let tmp%13#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%7#0) + (log tmp%13#0) + return 1u + block@4: // clearState_route_L32 + let tmp%14#0: uint64 = (txn OnCompletion) + let tmp%15#0: bool = (== tmp%14#0 NoOp) + (assert tmp%15#0) // OnCompletion is not NoOp + let tmp%16#0: uint64 = (txn ApplicationID) + let tmp%17#0: bool = (!= tmp%16#0 0u) + (assert tmp%17#0) // can only call when not creating + tests/approvals/local-state.algo.ts::LocalStateDemo.clearState() + return 1u + block@5: // switch_case_default_L7 + goto block@6 + block@6: // switch_case_next_L7 + goto block@11 + block@7: // bare_routing_L7 + let tmp%18#0: uint64 = (txn OnCompletion) + switch tmp%18#0 {0u => block@8, * => block@9} + block@8: // __algots__.defaultCreate_L7 + let tmp%19#0: uint64 = (txn ApplicationID) + let tmp%20#0: bool = (== tmp%19#0 0u) + (assert tmp%20#0) // can only call when creating + tests/approvals/local-state.algo.ts::LocalStateDemo.__algots__.defaultCreate() + return 1u + block@9: // switch_case_default_L7 + goto block@10 + block@10: // switch_case_next_L7 + goto block@11 + block@11: // after_if_else_L7 + return 0u + +subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.setState(p.a: uint64, p.b: bytes, c: bytes) -> void: + block@0: // L14 + let a#0: uint64 = p.a#0 + let b#0: bytes = p.b#0 + let tmp%0#0: bytes = (txn Sender) + (app_local_put tmp%0#0 "l1" a#0) + let tmp%1#0: bytes = (txn Sender) + (app_local_put tmp%1#0 "localUint2" a#0) + let tmp%2#0: bytes = (txn Sender) + (app_local_put tmp%2#0 "b1" b#0) + let tmp%3#0: bytes = (txn Sender) + (app_local_put tmp%3#0 "localBytes2" b#0) + let copy%0#0: bytes = c#0 + let tmp%4#0: bytes = (txn Sender) + (app_local_put tmp%4#0 "localEncoded" copy%0#0) + return + +subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.getState() -> : + block@0: // L22 + let tmp%0#0: bytes = (txn Sender) + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_local_get_ex tmp%0#0 0u "l1") + (assert maybe_exists%0#0) // check LocalState exists + let tmp%1#0: bytes = (txn Sender) + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_local_get_ex tmp%1#0 0u "localUint2") + (assert maybe_exists%1#0) // check LocalState exists + let tmp%2#0: bytes = (txn Sender) + let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (app_local_get_ex tmp%2#0 0u "b1") + (assert maybe_exists%2#0) // check LocalState exists + let tmp%3#0: bytes = (txn Sender) + let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (app_local_get_ex tmp%3#0 0u "localBytes2") + (assert maybe_exists%3#0) // check LocalState exists + let tmp%4#0: bytes = (txn Sender) + let (maybe_value%4#0: bytes, maybe_exists%4#0: bool) = (app_local_get_ex tmp%4#0 0u "localEncoded") + (assert maybe_exists%4#0) // check LocalState exists + let copy%0#0: bytes = maybe_value%4#0 + let tmp%5#0: bytes = (txn Sender) + let (maybe_value%5#0: uint64, maybe_exists%5#0: bool) = (app_local_get_ex tmp%5#0 0u "l1") + (assert maybe_exists%5#0) // check LocalState exists + let tmp%6#0: bytes = (txn Sender) + let (maybe_value%6#0: uint64, maybe_exists%6#0: bool) = (app_local_get_ex tmp%6#0 0u "localUint2") + (assert maybe_exists%6#0) // check LocalState exists + let tmp%7#0: bytes = (txn Sender) + let (maybe_value%7#0: bytes, maybe_exists%7#0: bool) = (app_local_get_ex tmp%7#0 0u "b1") + (assert maybe_exists%7#0) // check LocalState exists + let tmp%8#0: bytes = (txn Sender) + let (maybe_value%8#0: bytes, maybe_exists%8#0: bool) = (app_local_get_ex tmp%8#0 0u "localBytes2") + (assert maybe_exists%8#0) // check LocalState exists + let tmp%9#0: bytes = (txn Sender) + let (maybe_value%9#0: bytes, maybe_exists%9#0: bool) = (app_local_get_ex tmp%9#0 0u "localEncoded") + (assert maybe_exists%9#0) // check LocalState exists + let copy%1#0: bytes = maybe_value%9#0 + let tmp%10#0: bytes = (txn Sender) + let (maybe_value%10#0: uint64, maybe_exists%10#0: bool) = (app_local_get_ex tmp%10#0 0u "l1") + (assert maybe_exists%10#0) // check LocalState exists + let tmp%11#0: bytes = (txn Sender) + let (maybe_value%11#0: uint64, maybe_exists%11#0: bool) = (app_local_get_ex tmp%11#0 0u "localUint2") + (assert maybe_exists%11#0) // check LocalState exists + let tmp%12#0: bytes = (txn Sender) + let (maybe_value%12#0: bytes, maybe_exists%12#0: bool) = (app_local_get_ex tmp%12#0 0u "b1") + (assert maybe_exists%12#0) // check LocalState exists + let tmp%13#0: bytes = (txn Sender) + let (maybe_value%13#0: bytes, maybe_exists%13#0: bool) = (app_local_get_ex tmp%13#0 0u "localBytes2") + (assert maybe_exists%13#0) // check LocalState exists + let tmp%14#0: bytes = (txn Sender) + let (maybe_value%14#0: bytes, maybe_exists%14#0: bool) = (app_local_get_ex tmp%14#0 0u "localEncoded") + (assert maybe_exists%14#0) // check LocalState exists + let copy%2#0: bytes = maybe_value%14#0 + let tmp%15#0: bytes = (txn Sender) + let (maybe_value%15#0: uint64, maybe_exists%15#0: bool) = (app_local_get_ex tmp%15#0 0u "l1") + (assert maybe_exists%15#0) // check LocalState exists + let tmp%16#0: bytes = (txn Sender) + let (maybe_value%16#0: uint64, maybe_exists%16#0: bool) = (app_local_get_ex tmp%16#0 0u "localUint2") + (assert maybe_exists%16#0) // check LocalState exists + let tmp%17#0: bytes = (txn Sender) + let (maybe_value%17#0: bytes, maybe_exists%17#0: bool) = (app_local_get_ex tmp%17#0 0u "b1") + (assert maybe_exists%17#0) // check LocalState exists + let tmp%18#0: bytes = (txn Sender) + let (maybe_value%18#0: bytes, maybe_exists%18#0: bool) = (app_local_get_ex tmp%18#0 0u "localBytes2") + (assert maybe_exists%18#0) // check LocalState exists + let tmp%19#0: bytes = (txn Sender) + let (maybe_value%19#0: bytes, maybe_exists%19#0: bool) = (app_local_get_ex tmp%19#0 0u "localEncoded") + (assert maybe_exists%19#0) // check LocalState exists + let copy%3#0: bytes = maybe_value%19#0 + let tmp%20#0: bytes = (txn Sender) + let (maybe_value%20#0: uint64, maybe_exists%20#0: bool) = (app_local_get_ex tmp%20#0 0u "l1") + (assert maybe_exists%20#0) // check LocalState exists + let tmp%21#0: bytes = (txn Sender) + let (maybe_value%21#0: uint64, maybe_exists%21#0: bool) = (app_local_get_ex tmp%21#0 0u "localUint2") + (assert maybe_exists%21#0) // check LocalState exists + let tmp%22#0: bytes = (txn Sender) + let (maybe_value%22#0: bytes, maybe_exists%22#0: bool) = (app_local_get_ex tmp%22#0 0u "b1") + (assert maybe_exists%22#0) // check LocalState exists + let tmp%23#0: bytes = (txn Sender) + let (maybe_value%23#0: bytes, maybe_exists%23#0: bool) = (app_local_get_ex tmp%23#0 0u "localBytes2") + (assert maybe_exists%23#0) // check LocalState exists + let tmp%24#0: bytes = (txn Sender) + let (maybe_value%24#0: bytes, maybe_exists%24#0: bool) = (app_local_get_ex tmp%24#0 0u "localEncoded") + (assert maybe_exists%24#0) // check LocalState exists + let copy%4#0: bytes = maybe_value%24#0 + return maybe_value%0#0 maybe_value%6#0 maybe_value%12#0 maybe_value%18#0 copy%4#0 + +subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.clearState() -> void: + block@0: // L32 + let tmp%0#0: bytes = (txn Sender) + (app_local_del tmp%0#0 "l1") + let tmp%1#0: bytes = (txn Sender) + (app_local_del tmp%1#0 "localUint2") + let tmp%2#0: bytes = (txn Sender) + (app_local_del tmp%2#0 "b1") + let tmp%3#0: bytes = (txn Sender) + (app_local_del tmp%3#0 "localBytes2") + let tmp%4#0: bytes = (txn Sender) + (app_local_del tmp%4#0 "localEncoded") + return + +subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.__algots__.defaultCreate() -> void: + block@0: // L7 + return \ No newline at end of file diff --git a/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.clear.0.ssa.ir b/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/local-state/LocalStateDemo.ir/LocalStateDemo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/local-state/LocalStateDemo.ssa.ir b/tests/approvals/out/local-state/LocalStateDemo.ssa.ir deleted file mode 100644 index 0be39cdf..00000000 --- a/tests/approvals/out/local-state/LocalStateDemo.ssa.ir +++ /dev/null @@ -1,222 +0,0 @@ -contract tests/approvals/local-state.algo.ts::LocalStateDemo: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.__puya_arc4_router__() -> bool: - block@0: // L7 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@7 - block@1: // abi_routing_L7 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "setState((uint64,byte[]),uint64[10])void" => block@2, method "getState()(uint64,uint64,byte[],byte[],uint64[10])" => block@3, method "clearState()void" => block@4, * => block@5} - block@2: // setState_route_L14 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let item0%0#0: bytes = (extract3 tmp%7#0 0u 8u) // on error: Index access is out of bounds - let item0%0%0#0: uint64 = (btoi item0%0#0) - let item_start_offset%0#0: uint64 = (extract_uint16 tmp%7#0 8u) - let item_end_offset%0#0: uint64 = (len tmp%7#0) - let item1%0#0: bytes = (substring3 tmp%7#0 item_start_offset%0#0 item_end_offset%0#0) - let item1%0%0#0: bytes = ((extract 2 0) item1%0#0) - let tmp%8#0: bytes = (txna ApplicationArgs 2) - tests/approvals/local-state.algo.ts::LocalStateDemo.setState(item0%0%0#0, item1%0%0#0, tmp%8#0) - return 1u - block@3: // getState_route_L22 - let tmp%9#0: uint64 = (txn OnCompletion) - let tmp%10#0: bool = (== tmp%9#0 NoOp) - (assert tmp%10#0) // OnCompletion is not NoOp - let tmp%11#0: uint64 = (txn ApplicationID) - let tmp%12#0: bool = (!= tmp%11#0 0u) - (assert tmp%12#0) // can only call when not creating - let (elements_to_encode%0#0: uint64, elements_to_encode%1#0: uint64, elements_to_encode%2#0: bytes, elements_to_encode%3#0: bytes, elements_to_encode%4#0: bytes) = tests/approvals/local-state.algo.ts::LocalStateDemo.getState() - let val_as_bytes%0#0: bytes = (itob elements_to_encode%0#0) - let val_as_bytes%1#0: bytes = (itob elements_to_encode%1#0) - let length%0#0: uint64 = (len elements_to_encode%2#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 elements_to_encode%2#0) - let length%1#0: uint64 = (len elements_to_encode%3#0) - let as_bytes%1#0: bytes = (itob length%1#0) - let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 elements_to_encode%3#0) - let current_tail_offset%0#0: uint64 = 100u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) - let as_bytes%2#0: bytes = (itob current_tail_offset%0#0) - let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%2#0) - let encoded_tuple_buffer%3#0: bytes = (concat encoded_tuple_buffer%2#0 offset_as_uint16%0#0) - let data_length%0#0: uint64 = (len encoded_value%0#0) - let current_tail_offset%1#0: uint64 = (+ current_tail_offset%0#0 data_length%0#0) - let as_bytes%3#0: bytes = (itob current_tail_offset%1#0) - let offset_as_uint16%1#0: bytes = ((extract 6 2) as_bytes%3#0) - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 offset_as_uint16%1#0) - let data_length%1#0: uint64 = (len encoded_value%1#0) - let current_tail_offset%2#0: uint64 = (+ current_tail_offset%1#0 data_length%1#0) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 elements_to_encode%4#0) - let encoded_tuple_buffer%6#0: bytes = (concat encoded_tuple_buffer%5#0 encoded_value%0#0) - let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 encoded_value%1#0) - let tmp%13#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%7#0) - (log tmp%13#0) - return 1u - block@4: // clearState_route_L32 - let tmp%14#0: uint64 = (txn OnCompletion) - let tmp%15#0: bool = (== tmp%14#0 NoOp) - (assert tmp%15#0) // OnCompletion is not NoOp - let tmp%16#0: uint64 = (txn ApplicationID) - let tmp%17#0: bool = (!= tmp%16#0 0u) - (assert tmp%17#0) // can only call when not creating - tests/approvals/local-state.algo.ts::LocalStateDemo.clearState() - return 1u - block@5: // switch_case_default_L7 - goto block@6 - block@6: // switch_case_next_L7 - goto block@11 - block@7: // bare_routing_L7 - let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L7 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating - tests/approvals/local-state.algo.ts::LocalStateDemo.__algots__.defaultCreate() - return 1u - block@9: // switch_case_default_L7 - goto block@10 - block@10: // switch_case_next_L7 - goto block@11 - block@11: // after_if_else_L7 - return 0u - - subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.setState(p.a: uint64, p.b: bytes, c: bytes) -> void: - block@0: // L14 - let a#0: uint64 = p.a#0 - let b#0: bytes = p.b#0 - let tmp%0#0: bytes = (txn Sender) - (app_local_put tmp%0#0 "l1" a#0) - let tmp%1#0: bytes = (txn Sender) - (app_local_put tmp%1#0 "localUint2" a#0) - let tmp%2#0: bytes = (txn Sender) - (app_local_put tmp%2#0 "b1" b#0) - let tmp%3#0: bytes = (txn Sender) - (app_local_put tmp%3#0 "localBytes2" b#0) - let copy%0#0: bytes = c#0 - let tmp%4#0: bytes = (txn Sender) - (app_local_put tmp%4#0 "localEncoded" copy%0#0) - return - - subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.getState() -> : - block@0: // L22 - let tmp%0#0: bytes = (txn Sender) - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_local_get_ex tmp%0#0 0u "l1") - (assert maybe_exists%0#0) // check LocalState exists - let tmp%1#0: bytes = (txn Sender) - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_local_get_ex tmp%1#0 0u "localUint2") - (assert maybe_exists%1#0) // check LocalState exists - let tmp%2#0: bytes = (txn Sender) - let (maybe_value%2#0: bytes, maybe_exists%2#0: bool) = (app_local_get_ex tmp%2#0 0u "b1") - (assert maybe_exists%2#0) // check LocalState exists - let tmp%3#0: bytes = (txn Sender) - let (maybe_value%3#0: bytes, maybe_exists%3#0: bool) = (app_local_get_ex tmp%3#0 0u "localBytes2") - (assert maybe_exists%3#0) // check LocalState exists - let tmp%4#0: bytes = (txn Sender) - let (maybe_value%4#0: bytes, maybe_exists%4#0: bool) = (app_local_get_ex tmp%4#0 0u "localEncoded") - (assert maybe_exists%4#0) // check LocalState exists - let copy%0#0: bytes = maybe_value%4#0 - let tmp%5#0: bytes = (txn Sender) - let (maybe_value%5#0: uint64, maybe_exists%5#0: bool) = (app_local_get_ex tmp%5#0 0u "l1") - (assert maybe_exists%5#0) // check LocalState exists - let tmp%6#0: bytes = (txn Sender) - let (maybe_value%6#0: uint64, maybe_exists%6#0: bool) = (app_local_get_ex tmp%6#0 0u "localUint2") - (assert maybe_exists%6#0) // check LocalState exists - let tmp%7#0: bytes = (txn Sender) - let (maybe_value%7#0: bytes, maybe_exists%7#0: bool) = (app_local_get_ex tmp%7#0 0u "b1") - (assert maybe_exists%7#0) // check LocalState exists - let tmp%8#0: bytes = (txn Sender) - let (maybe_value%8#0: bytes, maybe_exists%8#0: bool) = (app_local_get_ex tmp%8#0 0u "localBytes2") - (assert maybe_exists%8#0) // check LocalState exists - let tmp%9#0: bytes = (txn Sender) - let (maybe_value%9#0: bytes, maybe_exists%9#0: bool) = (app_local_get_ex tmp%9#0 0u "localEncoded") - (assert maybe_exists%9#0) // check LocalState exists - let copy%1#0: bytes = maybe_value%9#0 - let tmp%10#0: bytes = (txn Sender) - let (maybe_value%10#0: uint64, maybe_exists%10#0: bool) = (app_local_get_ex tmp%10#0 0u "l1") - (assert maybe_exists%10#0) // check LocalState exists - let tmp%11#0: bytes = (txn Sender) - let (maybe_value%11#0: uint64, maybe_exists%11#0: bool) = (app_local_get_ex tmp%11#0 0u "localUint2") - (assert maybe_exists%11#0) // check LocalState exists - let tmp%12#0: bytes = (txn Sender) - let (maybe_value%12#0: bytes, maybe_exists%12#0: bool) = (app_local_get_ex tmp%12#0 0u "b1") - (assert maybe_exists%12#0) // check LocalState exists - let tmp%13#0: bytes = (txn Sender) - let (maybe_value%13#0: bytes, maybe_exists%13#0: bool) = (app_local_get_ex tmp%13#0 0u "localBytes2") - (assert maybe_exists%13#0) // check LocalState exists - let tmp%14#0: bytes = (txn Sender) - let (maybe_value%14#0: bytes, maybe_exists%14#0: bool) = (app_local_get_ex tmp%14#0 0u "localEncoded") - (assert maybe_exists%14#0) // check LocalState exists - let copy%2#0: bytes = maybe_value%14#0 - let tmp%15#0: bytes = (txn Sender) - let (maybe_value%15#0: uint64, maybe_exists%15#0: bool) = (app_local_get_ex tmp%15#0 0u "l1") - (assert maybe_exists%15#0) // check LocalState exists - let tmp%16#0: bytes = (txn Sender) - let (maybe_value%16#0: uint64, maybe_exists%16#0: bool) = (app_local_get_ex tmp%16#0 0u "localUint2") - (assert maybe_exists%16#0) // check LocalState exists - let tmp%17#0: bytes = (txn Sender) - let (maybe_value%17#0: bytes, maybe_exists%17#0: bool) = (app_local_get_ex tmp%17#0 0u "b1") - (assert maybe_exists%17#0) // check LocalState exists - let tmp%18#0: bytes = (txn Sender) - let (maybe_value%18#0: bytes, maybe_exists%18#0: bool) = (app_local_get_ex tmp%18#0 0u "localBytes2") - (assert maybe_exists%18#0) // check LocalState exists - let tmp%19#0: bytes = (txn Sender) - let (maybe_value%19#0: bytes, maybe_exists%19#0: bool) = (app_local_get_ex tmp%19#0 0u "localEncoded") - (assert maybe_exists%19#0) // check LocalState exists - let copy%3#0: bytes = maybe_value%19#0 - let tmp%20#0: bytes = (txn Sender) - let (maybe_value%20#0: uint64, maybe_exists%20#0: bool) = (app_local_get_ex tmp%20#0 0u "l1") - (assert maybe_exists%20#0) // check LocalState exists - let tmp%21#0: bytes = (txn Sender) - let (maybe_value%21#0: uint64, maybe_exists%21#0: bool) = (app_local_get_ex tmp%21#0 0u "localUint2") - (assert maybe_exists%21#0) // check LocalState exists - let tmp%22#0: bytes = (txn Sender) - let (maybe_value%22#0: bytes, maybe_exists%22#0: bool) = (app_local_get_ex tmp%22#0 0u "b1") - (assert maybe_exists%22#0) // check LocalState exists - let tmp%23#0: bytes = (txn Sender) - let (maybe_value%23#0: bytes, maybe_exists%23#0: bool) = (app_local_get_ex tmp%23#0 0u "localBytes2") - (assert maybe_exists%23#0) // check LocalState exists - let tmp%24#0: bytes = (txn Sender) - let (maybe_value%24#0: bytes, maybe_exists%24#0: bool) = (app_local_get_ex tmp%24#0 0u "localEncoded") - (assert maybe_exists%24#0) // check LocalState exists - let copy%4#0: bytes = maybe_value%24#0 - return maybe_value%0#0 maybe_value%6#0 maybe_value%12#0 maybe_value%18#0 copy%4#0 - - subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.clearState() -> void: - block@0: // L32 - let tmp%0#0: bytes = (txn Sender) - (app_local_del tmp%0#0 "l1") - let tmp%1#0: bytes = (txn Sender) - (app_local_del tmp%1#0 "localUint2") - let tmp%2#0: bytes = (txn Sender) - (app_local_del tmp%2#0 "b1") - let tmp%3#0: bytes = (txn Sender) - (app_local_del tmp%3#0 "localBytes2") - let tmp%4#0: bytes = (txn Sender) - (app_local_del tmp%4#0 "localEncoded") - return - - subroutine tests/approvals/local-state.algo.ts::LocalStateDemo.__algots__.defaultCreate() -> void: - block@0: // L7 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/logic-sig/AllowNoFee.ir/AllowNoFee.0.ssa.ir b/tests/approvals/out/logic-sig/AllowNoFee.ir/AllowNoFee.0.ssa.ir new file mode 100644 index 00000000..9e8d234f --- /dev/null +++ b/tests/approvals/out/logic-sig/AllowNoFee.ir/AllowNoFee.0.ssa.ir @@ -0,0 +1,11 @@ +main tests/approvals/logic-sig.algo.ts::program: + block@0: // L14 + tests/approvals/logic-sig.algo.ts::feeIsZero() + return 1u + +subroutine tests/approvals/logic-sig.algo.ts::feeIsZero() -> void: + block@0: // L9 + let tmp%0#0: uint64 = (txn Fee) + let tmp%1#0: bool = (== tmp%0#0 0u) + (assert tmp%1#0) // Fee must be zero + return \ No newline at end of file diff --git a/tests/approvals/out/logic-sig/AllowNoFee.ssa.ir b/tests/approvals/out/logic-sig/AllowNoFee.ssa.ir deleted file mode 100644 index 6bf188a5..00000000 --- a/tests/approvals/out/logic-sig/AllowNoFee.ssa.ir +++ /dev/null @@ -1,12 +0,0 @@ -program logicsig tests/approvals/logic-sig.algo.ts::AllowNoFee: - subroutine tests/approvals/logic-sig.algo.ts::program() -> uint64: - block@0: // L14 - tests/approvals/logic-sig.algo.ts::feeIsZero() - return 1u - - subroutine tests/approvals/logic-sig.algo.ts::feeIsZero() -> void: - block@0: // L9 - let tmp%0#0: uint64 = (txn Fee) - let tmp%1#0: bool = (== tmp%0#0 0u) - (assert tmp%1#0) // Fee must be zero - return \ No newline at end of file diff --git a/tests/approvals/out/logic-sig/AllowNoFee.teal b/tests/approvals/out/logic-sig/AllowNoFee.teal index 7a38a2e2..e51dbbdc 100644 --- a/tests/approvals/out/logic-sig/AllowNoFee.teal +++ b/tests/approvals/out/logic-sig/AllowNoFee.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/logic-sig.algo.ts::AllowNoFee: +// tests/approvals/logic-sig.algo.ts::program() -> uint64: +main: // tests/approvals/logic-sig.algo.ts:15 // feeIsZero() callsub feeIsZero diff --git a/tests/approvals/out/logic-sig/AlwaysAllow.ir/AlwaysAllow.0.ssa.ir b/tests/approvals/out/logic-sig/AlwaysAllow.ir/AlwaysAllow.0.ssa.ir new file mode 100644 index 00000000..cce3d3ba --- /dev/null +++ b/tests/approvals/out/logic-sig/AlwaysAllow.ir/AlwaysAllow.0.ssa.ir @@ -0,0 +1,3 @@ +main tests/approvals/logic-sig.algo.ts::program: + block@0: // L4 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/logic-sig/AlwaysAllow.ssa.ir b/tests/approvals/out/logic-sig/AlwaysAllow.ssa.ir deleted file mode 100644 index 4040853e..00000000 --- a/tests/approvals/out/logic-sig/AlwaysAllow.ssa.ir +++ /dev/null @@ -1,4 +0,0 @@ -program logicsig tests/approvals/logic-sig.algo.ts::AlwaysAllow: - subroutine tests/approvals/logic-sig.algo.ts::program() -> bool: - block@0: // L4 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/logic-sig/AlwaysAllow.teal b/tests/approvals/out/logic-sig/AlwaysAllow.teal index d8443a4e..edd997f9 100644 --- a/tests/approvals/out/logic-sig/AlwaysAllow.teal +++ b/tests/approvals/out/logic-sig/AlwaysAllow.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/logic-sig.algo.ts::AlwaysAllow: +// tests/approvals/logic-sig.algo.ts::program() -> uint64: +main: // tests/approvals/logic-sig.algo.ts:5 // return true pushint 1 // 1 diff --git a/tests/approvals/out/named-types/MyContract.approval.teal b/tests/approvals/out/named-types/MyContract.approval.teal index 516838b5..2031d52f 100644 --- a/tests/approvals/out/named-types/MyContract.approval.teal +++ b/tests/approvals/out/named-types/MyContract.approval.teal @@ -1,21 +1,22 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/named-types.algo.ts::MyContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 8 bytecblock 0x 0x151f7c75 - callsub __puya_arc4_router__ - return - -// tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/named-types.algo.ts:14 // export class MyContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@9 + bz main_bare_routing@10 + +main_abi_routing@2: + // tests/approvals/named-types.algo.ts:14 + // export class MyContract extends Contract { txna ApplicationArgs 0 pushbytes 0xf02228b0 // method "getXY()(uint64,uint64)" pushbytes 0xd908575b // method "getYX()(uint64,uint64)" @@ -23,12 +24,23 @@ __puya_arc4_router__: pushbytes 0xdc75f81d // method "test((uint64,uint64),(uint64,uint64))void" pushbytes 0x040e2e4e // method "testing()((uint64,uint64),(uint64,uint64),(uint64,uint64))" uncover 5 - match __puya_arc4_router___getXY_route@2 __puya_arc4_router___getYX_route@3 __puya_arc4_router___getAnon_route@4 __puya_arc4_router___test_route@5 __puya_arc4_router___testing_route@6 - b __puya_arc4_router___switch_case_default@7 + match main_getXY_route@3 main_getYX_route@4 main_getAnon_route@5 main_test_route@6 main_testing_route@7 -__puya_arc4_router___getXY_route@2: - // tests/approvals/named-types.algo.ts:15 - // public getXY(): XY { +main_switch_case_default@8: + +main_switch_case_next@9: + +main_after_if_else@14: + // tests/approvals/named-types.algo.ts:14 + // export class MyContract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15: + return + +main_testing_route@7: + // tests/approvals/named-types.algo.ts:40 + // public testing() { txn OnCompletion intc_0 // NoOp == @@ -37,7 +49,11 @@ __puya_arc4_router___getXY_route@2: intc_0 // 0 != assert // can only call when not creating - callsub getXY + callsub testing + cover 5 + cover 4 + cover 3 + cover 2 swap itob swap @@ -48,26 +64,7 @@ __puya_arc4_router___getXY_route@2: concat swap concat - bytec_1 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - retsub - -__puya_arc4_router___getYX_route@3: - // tests/approvals/named-types.algo.ts:22 - // public getYX(): YX { - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - callsub getYX - swap + cover 2 itob swap itob @@ -77,28 +74,9 @@ __puya_arc4_router___getYX_route@3: concat swap concat - bytec_1 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - retsub - -__puya_arc4_router___getAnon_route@4: - // tests/approvals/named-types.algo.ts:29 - // public getAnon() { - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - callsub getAnon - swap + uncover 2 itob - swap + uncover 3 itob swap bytec_0 // 0x @@ -106,14 +84,21 @@ __puya_arc4_router___getAnon_route@4: concat swap concat + bytec_0 // 0x + uncover 3 + concat + uncover 2 + concat + swap + concat bytec_1 // 0x151f7c75 swap concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 -__puya_arc4_router___test_route@5: +main_test_route@6: // tests/approvals/named-types.algo.ts:36 // public test(x: XY, y: YX) { txn OnCompletion @@ -156,11 +141,11 @@ __puya_arc4_router___test_route@5: uncover 3 callsub test intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 -__puya_arc4_router___testing_route@6: - // tests/approvals/named-types.algo.ts:40 - // public testing() { +main_getAnon_route@5: + // tests/approvals/named-types.algo.ts:29 + // public getAnon() { txn OnCompletion intc_0 // NoOp == @@ -169,11 +154,7 @@ __puya_arc4_router___testing_route@6: intc_0 // 0 != assert // can only call when not creating - callsub testing - cover 5 - cover 4 - cover 3 - cover 2 + callsub getAnon swap itob swap @@ -184,7 +165,26 @@ __puya_arc4_router___testing_route@6: concat swap concat - cover 2 + bytec_1 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 + +main_getYX_route@4: + // tests/approvals/named-types.algo.ts:22 + // public getYX(): YX { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub getYX + swap itob swap itob @@ -194,9 +194,28 @@ __puya_arc4_router___testing_route@6: concat swap concat - uncover 2 + bytec_1 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 + +main_getXY_route@3: + // tests/approvals/named-types.algo.ts:15 + // public getXY(): XY { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub getXY + swap itob - uncover 3 + swap itob swap bytec_0 // 0x @@ -204,33 +223,27 @@ __puya_arc4_router___testing_route@6: concat swap concat - bytec_0 // 0x - uncover 3 - concat - uncover 2 - concat - swap - concat bytec_1 // 0x151f7c75 swap concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - b __puya_arc4_router___after_if_else@13 + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 -__puya_arc4_router___bare_routing@9: +main_bare_routing@10: // tests/approvals/named-types.algo.ts:14 // export class MyContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@10 - b __puya_arc4_router___switch_case_default@11 + match main___algots__.defaultCreate@11 + +main_switch_case_default@12: + +main_switch_case_next@13: + b main_after_if_else@14 -__puya_arc4_router_____algots__.defaultCreate@10: +main___algots__.defaultCreate@11: // tests/approvals/named-types.algo.ts:14 // export class MyContract extends Contract { txn ApplicationID @@ -239,15 +252,7 @@ __puya_arc4_router_____algots__.defaultCreate@10: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@11: - -__puya_arc4_router___after_if_else@13: - // tests/approvals/named-types.algo.ts:14 - // export class MyContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__@15 // tests/approvals/named-types.algo.ts::MyContract.getXY() -> uint64, uint64: @@ -318,15 +323,17 @@ test: frame_dig -2 == bz test_bool_false@3 + +test_and_contd@1: + // tests/approvals/named-types.algo.ts:37 + // assertMatch(x, { ...y }) frame_dig -4 frame_dig -1 == bz test_bool_false@3 - intc_1 // 1 - b test_bool_merge@4 -test_bool_false@3: - intc_0 // 0 +test_bool_true@2: + intc_1 // 1 test_bool_merge@4: // tests/approvals/named-types.algo.ts:37 @@ -334,6 +341,10 @@ test_bool_merge@4: assert // assert target is match for conditions retsub +test_bool_false@3: + intc_0 // 0 + b test_bool_merge@4 + // tests/approvals/named-types.algo.ts::MyContract.testing() -> uint64, uint64, uint64, uint64, uint64, uint64: testing: diff --git a/tests/approvals/out/named-types/MyContract.arc32.json b/tests/approvals/out/named-types/MyContract.arc32.json index 44bbb72c..c4cb01ae 100644 --- a/tests/approvals/out/named-types/MyContract.arc32.json +++ b/tests/approvals/out/named-types/MyContract.arc32.json @@ -100,8 +100,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDgKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjAyMjI4YjAgLy8gbWV0aG9kICJnZXRYWSgpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4ZDkwODU3NWIgLy8gbWV0aG9kICJnZXRZWCgpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4NTc3YjFmZmMgLy8gbWV0aG9kICJnZXRBbm9uKCkodWludDY0LHVpbnQ2NCkiCiAgICBwdXNoYnl0ZXMgMHhkYzc1ZjgxZCAvLyBtZXRob2QgInRlc3QoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MDQwZTJlNGUgLy8gbWV0aG9kICJ0ZXN0aW5nKCkoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpIgogICAgdW5jb3ZlciA1CiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRYWV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFlYX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0QW5vbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVANSBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0aW5nX3JvdXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRYWV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0WVhfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0WVgoKTogWVggewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRZWAogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEFub25fcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI5CiAgICAvLyBwdWJsaWMgZ2V0QW5vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QW5vbgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM2CiAgICAvLyBwdWJsaWMgdGVzdCh4OiBYWSwgeTogWVgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGludGNfMiAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIGNhbGxzdWIgdGVzdAogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdGluZ19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDAKICAgIC8vIHB1YmxpYyB0ZXN0aW5nKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0aW5nCiAgICBjb3ZlciA1CiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMwoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTEKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDExOgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5nZXRYWSgpIC0+IHVpbnQ2NCwgdWludDY0OgpnZXRYWToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0WFkoKTogWFkgewogICAgcHJvdG8gMCAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNwogICAgLy8geDogMSwKICAgIGludGNfMSAvLyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxOAogICAgLy8geTogMiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNi0xOQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgeDogMSwKICAgIC8vICAgeTogMiwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFlYKCkgLT4gdWludDY0LCB1aW50NjQ6CmdldFlYOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRZWCgpOiBZWCB7CiAgICBwcm90byAwIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI1CiAgICAvLyB5OiAxMTEsCiAgICBwdXNoaW50IDExMSAvLyAxMTEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI0CiAgICAvLyB4OiAyMjIsCiAgICBwdXNoaW50IDIyMiAvLyAyMjIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIzLTI2CiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiAyMjIsCiAgICAvLyAgIHk6IDExMSwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEFub24oKSAtPiB1aW50NjQsIHVpbnQ2NDoKZ2V0QW5vbjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI5CiAgICAvLyBwdWJsaWMgZ2V0QW5vbigpIHsKICAgIHByb3RvIDAgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzEKICAgIC8vIHg6IFVpbnQ2NCgzKSwKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozMgogICAgLy8geTogVWludDY0KDQpLAogICAgcHVzaGludCA0IC8vIDQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjMwLTMzCiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiBVaW50NjQoMyksCiAgICAvLyAgIHk6IFVpbnQ2NCg0KSwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LnRlc3QoeC54OiB1aW50NjQsIHgueTogdWludDY0LCB5Lnk6IHVpbnQ2NCwgeS54OiB1aW50NjQpIC0+IHZvaWQ6CnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICBwcm90byA0IDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3RfYm9vbF9tZXJnZUA0Cgp0ZXN0X2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCgp0ZXN0X2Jvb2xfbWVyZ2VANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC50ZXN0aW5nKCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKdGVzdGluZzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQwCiAgICAvLyBwdWJsaWMgdGVzdGluZygpIHsKICAgIHByb3RvIDAgNgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IGEgPSB0aGlzLmdldFhZKCkKICAgIGNhbGxzdWIgZ2V0WFkKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQyCiAgICAvLyBjb25zdCBiID0gdGhpcy5nZXRZWCgpCiAgICBjYWxsc3ViIGdldFlYCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MwogICAgLy8gY29uc3QgYyA9IHRoaXMuZ2V0QW5vbigpCiAgICBjYWxsc3ViIGdldEFub24KICAgIHBvcAogICAgY2FsbHN1YiBnZXRBbm9uCiAgICBjb3ZlciAyCiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQ0CiAgICAvLyByZXR1cm4gW2EsIGIsIGNdIGFzIGNvbnN0CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciA1CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDgKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NQoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGYwMjIyOGIwIC8vIG1ldGhvZCAiZ2V0WFkoKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweGQ5MDg1NzViIC8vIG1ldGhvZCAiZ2V0WVgoKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweDU3N2IxZmZjIC8vIG1ldGhvZCAiZ2V0QW5vbigpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4ZGM3NWY4MWQgLy8gbWV0aG9kICJ0ZXN0KCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpdm9pZCIKICAgIHB1c2hieXRlcyAweDA0MGUyZTRlIC8vIG1ldGhvZCAidGVzdGluZygpKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSIKICAgIHVuY292ZXIgNQogICAgbWF0Y2ggbWFpbl9nZXRYWV9yb3V0ZUAzIG1haW5fZ2V0WVhfcm91dGVANCBtYWluX2dldEFub25fcm91dGVANSBtYWluX3Rlc3Rfcm91dGVANiBtYWluX3Rlc3Rpbmdfcm91dGVANwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgptYWluX3N3aXRjaF9jYXNlX25leHRAOToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fdGVzdGluZ19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDAKICAgIC8vIHB1YmxpYyB0ZXN0aW5nKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0aW5nCiAgICBjb3ZlciA1CiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl90ZXN0X3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGludGNfMiAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzYKICAgIC8vIHB1YmxpYyB0ZXN0KHg6IFhZLCB5OiBZWCkgewogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIHRlc3QKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9nZXRBbm9uX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoyOQogICAgLy8gcHVibGljIGdldEFub24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEFub24KICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fZ2V0WVhfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0WVgoKTogWVggewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRZWAogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9nZXRYWV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFhZKCkgLT4gdWludDY0LCB1aW50NjQ6CmdldFhZOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICBwcm90byAwIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE3CiAgICAvLyB4OiAxLAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE4CiAgICAvLyB5OiAyLAogICAgcHVzaGludCAyIC8vIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE2LTE5CiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiAxLAogICAgLy8gICB5OiAyLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0WVgoKSAtPiB1aW50NjQsIHVpbnQ2NDoKZ2V0WVg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoyMgogICAgLy8gcHVibGljIGdldFlYKCk6IFlYIHsKICAgIHByb3RvIDAgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjUKICAgIC8vIHk6IDExMSwKICAgIHB1c2hpbnQgMTExIC8vIDExMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjQKICAgIC8vIHg6IDIyMiwKICAgIHB1c2hpbnQgMjIyIC8vIDIyMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjMtMjYKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIHg6IDIyMiwKICAgIC8vICAgeTogMTExLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0QW5vbigpIC0+IHVpbnQ2NCwgdWludDY0OgpnZXRBbm9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjkKICAgIC8vIHB1YmxpYyBnZXRBbm9uKCkgewogICAgcHJvdG8gMCAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozMQogICAgLy8geDogVWludDY0KDMpLAogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjMyCiAgICAvLyB5OiBVaW50NjQoNCksCiAgICBwdXNoaW50IDQgLy8gNAogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzAtMzMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIHg6IFVpbnQ2NCgzKSwKICAgIC8vICAgeTogVWludDY0KDQpLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QudGVzdCh4Lng6IHVpbnQ2NCwgeC55OiB1aW50NjQsIHkueTogdWludDY0LCB5Lng6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM2CiAgICAvLyBwdWJsaWMgdGVzdCh4OiBYWSwgeTogWVgpIHsKICAgIHByb3RvIDQgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzcKICAgIC8vIGFzc2VydE1hdGNoKHgsIHsgLi4ueSB9KQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieiB0ZXN0X2Jvb2xfZmFsc2VAMwoKdGVzdF9hbmRfY29udGRAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKCnRlc3RfYm9vbF90cnVlQDI6CiAgICBpbnRjXzEgLy8gMQoKdGVzdF9ib29sX21lcmdlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNwogICAgLy8gYXNzZXJ0TWF0Y2goeCwgeyAuLi55IH0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgp0ZXN0X2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIHRlc3RfYm9vbF9tZXJnZUA0CgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QudGVzdGluZygpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQ6CnRlc3Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MAogICAgLy8gcHVibGljIHRlc3RpbmcoKSB7CiAgICBwcm90byAwIDYKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBhID0gdGhpcy5nZXRYWSgpCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MgogICAgLy8gY29uc3QgYiA9IHRoaXMuZ2V0WVgoKQogICAgY2FsbHN1YiBnZXRZWAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDMKICAgIC8vIGNvbnN0IGMgPSB0aGlzLmdldEFub24oKQogICAgY2FsbHN1YiBnZXRBbm9uCiAgICBwb3AKICAgIGNhbGxzdWIgZ2V0QW5vbgogICAgY292ZXIgMgogICAgcG9wCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0NAogICAgLy8gcmV0dXJuIFthLCBiLCBjXSBhcyBjb25zdAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA1CiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/named-types/MyContract.arc56.json b/tests/approvals/out/named-types/MyContract.arc56.json index dca0b0e5..63c212ef 100644 --- a/tests/approvals/out/named-types/MyContract.arc56.json +++ b/tests/approvals/out/named-types/MyContract.arc56.json @@ -166,42 +166,42 @@ "sourceInfo": [ { "pc": [ - 181, - 186, - 194, - 199 + 157, + 162, + 170, + 175 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ - 82, - 111, - 140, - 169, - 218 + 74, + 145, + 196, + 227, + 258 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 357 + 352 ], "errorMessage": "assert target is match for conditions" }, { "pc": [ - 301 + 300 ], "errorMessage": "can only call when creating" }, { "pc": [ - 87, - 116, - 145, - 174, - 223 + 79, + 150, + 201, + 232, + 263 ], "errorMessage": "can only call when not creating" } @@ -214,8 +214,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDgKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4ZjAyMjI4YjAgLy8gbWV0aG9kICJnZXRYWSgpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4ZDkwODU3NWIgLy8gbWV0aG9kICJnZXRZWCgpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4NTc3YjFmZmMgLy8gbWV0aG9kICJnZXRBbm9uKCkodWludDY0LHVpbnQ2NCkiCiAgICBwdXNoYnl0ZXMgMHhkYzc1ZjgxZCAvLyBtZXRob2QgInRlc3QoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MDQwZTJlNGUgLy8gbWV0aG9kICJ0ZXN0aW5nKCkoKHVpbnQ2NCx1aW50NjQpLCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpIgogICAgdW5jb3ZlciA1CiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRYWV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldFlYX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0QW5vbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVANSBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0aW5nX3JvdXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19nZXRYWV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0WVhfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0WVgoKTogWVggewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRZWAogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEFub25fcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI5CiAgICAvLyBwdWJsaWMgZ2V0QW5vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QW5vbgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM2CiAgICAvLyBwdWJsaWMgdGVzdCh4OiBYWSwgeTogWVgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGludGNfMiAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgIGR1cAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIGNhbGxzdWIgdGVzdAogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdGluZ19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDAKICAgIC8vIHB1YmxpYyB0ZXN0aW5nKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0aW5nCiAgICBjb3ZlciA1CiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMwoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTEKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDExOgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5nZXRYWSgpIC0+IHVpbnQ2NCwgdWludDY0OgpnZXRYWToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE1CiAgICAvLyBwdWJsaWMgZ2V0WFkoKTogWFkgewogICAgcHJvdG8gMCAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNwogICAgLy8geDogMSwKICAgIGludGNfMSAvLyAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxOAogICAgLy8geTogMiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNi0xOQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgeDogMSwKICAgIC8vICAgeTogMiwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFlYKCkgLT4gdWludDY0LCB1aW50NjQ6CmdldFlYOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjIKICAgIC8vIHB1YmxpYyBnZXRZWCgpOiBZWCB7CiAgICBwcm90byAwIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI1CiAgICAvLyB5OiAxMTEsCiAgICBwdXNoaW50IDExMSAvLyAxMTEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI0CiAgICAvLyB4OiAyMjIsCiAgICBwdXNoaW50IDIyMiAvLyAyMjIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIzLTI2CiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiAyMjIsCiAgICAvLyAgIHk6IDExMSwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEFub24oKSAtPiB1aW50NjQsIHVpbnQ2NDoKZ2V0QW5vbjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjI5CiAgICAvLyBwdWJsaWMgZ2V0QW5vbigpIHsKICAgIHByb3RvIDAgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzEKICAgIC8vIHg6IFVpbnQ2NCgzKSwKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozMgogICAgLy8geTogVWludDY0KDQpLAogICAgcHVzaGludCA0IC8vIDQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjMwLTMzCiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiBVaW50NjQoMyksCiAgICAvLyAgIHk6IFVpbnQ2NCg0KSwKICAgIC8vIH0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LnRlc3QoeC54OiB1aW50NjQsIHgueTogdWludDY0LCB5Lnk6IHVpbnQ2NCwgeS54OiB1aW50NjQpIC0+IHZvaWQ6CnRlc3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICBwcm90byA0IDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCiAgICBiIHRlc3RfYm9vbF9tZXJnZUA0Cgp0ZXN0X2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCgp0ZXN0X2Jvb2xfbWVyZ2VANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGFzc2VydCAvLyBhc3NlcnQgdGFyZ2V0IGlzIG1hdGNoIGZvciBjb25kaXRpb25zCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC50ZXN0aW5nKCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKdGVzdGluZzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQwCiAgICAvLyBwdWJsaWMgdGVzdGluZygpIHsKICAgIHByb3RvIDAgNgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IGEgPSB0aGlzLmdldFhZKCkKICAgIGNhbGxzdWIgZ2V0WFkKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQyCiAgICAvLyBjb25zdCBiID0gdGhpcy5nZXRZWCgpCiAgICBjYWxsc3ViIGdldFlYCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MwogICAgLy8gY29uc3QgYyA9IHRoaXMuZ2V0QW5vbigpCiAgICBjYWxsc3ViIGdldEFub24KICAgIHBvcAogICAgY2FsbHN1YiBnZXRBbm9uCiAgICBjb3ZlciAyCiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQ0CiAgICAvLyByZXR1cm4gW2EsIGIsIGNdIGFzIGNvbnN0CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciA1CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDgKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NQoKbWFpbl9ibG9ja0AxOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTAKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGYwMjIyOGIwIC8vIG1ldGhvZCAiZ2V0WFkoKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweGQ5MDg1NzViIC8vIG1ldGhvZCAiZ2V0WVgoKSh1aW50NjQsdWludDY0KSIKICAgIHB1c2hieXRlcyAweDU3N2IxZmZjIC8vIG1ldGhvZCAiZ2V0QW5vbigpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4ZGM3NWY4MWQgLy8gbWV0aG9kICJ0ZXN0KCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpdm9pZCIKICAgIHB1c2hieXRlcyAweDA0MGUyZTRlIC8vIG1ldGhvZCAidGVzdGluZygpKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCksKHVpbnQ2NCx1aW50NjQpKSIKICAgIHVuY292ZXIgNQogICAgbWF0Y2ggbWFpbl9nZXRYWV9yb3V0ZUAzIG1haW5fZ2V0WVhfcm91dGVANCBtYWluX2dldEFub25fcm91dGVANSBtYWluX3Rlc3Rfcm91dGVANiBtYWluX3Rlc3Rpbmdfcm91dGVANwoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgptYWluX3N3aXRjaF9jYXNlX25leHRAOToKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTU6CiAgICByZXR1cm4KCm1haW5fdGVzdGluZ19yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDAKICAgIC8vIHB1YmxpYyB0ZXN0aW5nKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0aW5nCiAgICBjb3ZlciA1CiAgICBjb3ZlciA0CiAgICBjb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl90ZXN0X3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNgogICAgLy8gcHVibGljIHRlc3QoeDogWFksIHk6IFlYKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgZHVwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHN3YXAKICAgIGludGNfMiAvLyA4CiAgICBkdXAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzYKICAgIC8vIHB1YmxpYyB0ZXN0KHg6IFhZLCB5OiBZWCkgewogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIHRlc3QKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9nZXRBbm9uX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoyOQogICAgLy8gcHVibGljIGdldEFub24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEFub24KICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTUKCm1haW5fZ2V0WVhfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjIyCiAgICAvLyBwdWJsaWMgZ2V0WVgoKTogWVggewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRZWAogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgYnl0ZWNfMCAvLyAweAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKbWFpbl9nZXRYWV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlY18wIC8vIDB4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE1CgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEyOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNQoKCi8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFhZKCkgLT4gdWludDY0LCB1aW50NjQ6CmdldFhZOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTUKICAgIC8vIHB1YmxpYyBnZXRYWSgpOiBYWSB7CiAgICBwcm90byAwIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE3CiAgICAvLyB4OiAxLAogICAgaW50Y18xIC8vIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE4CiAgICAvLyB5OiAyLAogICAgcHVzaGludCAyIC8vIDIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjE2LTE5CiAgICAvLyByZXR1cm4gewogICAgLy8gICB4OiAxLAogICAgLy8gICB5OiAyLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0WVgoKSAtPiB1aW50NjQsIHVpbnQ2NDoKZ2V0WVg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czoyMgogICAgLy8gcHVibGljIGdldFlYKCk6IFlYIHsKICAgIHByb3RvIDAgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjUKICAgIC8vIHk6IDExMSwKICAgIHB1c2hpbnQgMTExIC8vIDExMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjQKICAgIC8vIHg6IDIyMiwKICAgIHB1c2hpbnQgMjIyIC8vIDIyMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjMtMjYKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIHg6IDIyMiwKICAgIC8vICAgeTogMTExLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0QW5vbigpIC0+IHVpbnQ2NCwgdWludDY0OgpnZXRBbm9uOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MjkKICAgIC8vIHB1YmxpYyBnZXRBbm9uKCkgewogICAgcHJvdG8gMCAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozMQogICAgLy8geDogVWludDY0KDMpLAogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjMyCiAgICAvLyB5OiBVaW50NjQoNCksCiAgICBwdXNoaW50IDQgLy8gNAogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzAtMzMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIHg6IFVpbnQ2NCgzKSwKICAgIC8vICAgeTogVWludDY0KDQpLAogICAgLy8gfQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QudGVzdCh4Lng6IHVpbnQ2NCwgeC55OiB1aW50NjQsIHkueTogdWludDY0LCB5Lng6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM2CiAgICAvLyBwdWJsaWMgdGVzdCh4OiBYWSwgeTogWVgpIHsKICAgIHByb3RvIDQgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MzcKICAgIC8vIGFzc2VydE1hdGNoKHgsIHsgLi4ueSB9KQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieiB0ZXN0X2Jvb2xfZmFsc2VAMwoKdGVzdF9hbmRfY29udGRAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjM3CiAgICAvLyBhc3NlcnRNYXRjaCh4LCB7IC4uLnkgfSkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogdGVzdF9ib29sX2ZhbHNlQDMKCnRlc3RfYm9vbF90cnVlQDI6CiAgICBpbnRjXzEgLy8gMQoKdGVzdF9ib29sX21lcmdlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czozNwogICAgLy8gYXNzZXJ0TWF0Y2goeCwgeyAuLi55IH0pCiAgICBhc3NlcnQgLy8gYXNzZXJ0IHRhcmdldCBpcyBtYXRjaCBmb3IgY29uZGl0aW9ucwogICAgcmV0c3ViCgp0ZXN0X2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIHRlc3RfYm9vbF9tZXJnZUA0CgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QudGVzdGluZygpIC0+IHVpbnQ2NCwgdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjQ6CnRlc3Rpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MAogICAgLy8gcHVibGljIHRlc3RpbmcoKSB7CiAgICBwcm90byAwIDYKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9uYW1lZC10eXBlcy5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBhID0gdGhpcy5nZXRYWSgpCiAgICBjYWxsc3ViIGdldFhZCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0MgogICAgLy8gY29uc3QgYiA9IHRoaXMuZ2V0WVgoKQogICAgY2FsbHN1YiBnZXRZWAogICAgY292ZXIgMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6NDMKICAgIC8vIGNvbnN0IGMgPSB0aGlzLmdldEFub24oKQogICAgY2FsbHN1YiBnZXRBbm9uCiAgICBwb3AKICAgIGNhbGxzdWIgZ2V0QW5vbgogICAgY292ZXIgMgogICAgcG9wCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbmFtZWQtdHlwZXMuYWxnby50czo0NAogICAgLy8gcmV0dXJuIFthLCBiLCBjXSBhcyBjb25zdAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA1CiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6Ok15Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL25hbWVkLXR5cGVzLmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiADAAEIJgIABBUffHUxGyITQQEINhoAgATwIiiwgATZCFdbgARXex/8gATcdfgdgAQEDi5OTwWOBQC6AJsAfABJAAIiQzEZIhJEMRgiE0SIARNOBU4ETgNOAkwWTBZMKExQTFBOAhZMFkwoTFBMUE8CFk8DFkwoTFBMUChPA1BPAlBMUClMULAjQv+4MRkiEkQxGCITRDYaAUkiJFgXTCRJWBc2GgJJIiRYF0wkSVgXTwNPA08DTwOIAJAjQv+FMRkiEkQxGCITRIgAd0wWTBZMKExQTFApTFCwI0L/ZjEZIhJEMRgiE0SIAE9MFkwWTChMUExQKUxQsCNC/0cxGSISRDEYIhNEiAApTBZMFkwoTFBMUClMULAjQv8oMRkiTI4BAANC/xwxGCISRIgAWiNC/xGKAAIjgQKJigACgW+B3gGJigACgQOBBImKBACL/Yv+EkEAC4v8i/8SQQADI0SJIkL/+ooABoj/yEyI/8tOAoj/z0iI/8tOAkhMTwNPBU8ETwVPBU8FiYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/named-types/MyContract.clear.teal b/tests/approvals/out/named-types/MyContract.clear.teal index 2074429e..a4d58047 100644 --- a/tests/approvals/out/named-types/MyContract.clear.teal +++ b/tests/approvals/out/named-types/MyContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/named-types.algo.ts::MyContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/named-types/MyContract.ir/MyContract.approval.0.ssa.ir b/tests/approvals/out/named-types/MyContract.ir/MyContract.approval.0.ssa.ir new file mode 100644 index 00000000..8597fd9b --- /dev/null +++ b/tests/approvals/out/named-types/MyContract.ir/MyContract.approval.0.ssa.ir @@ -0,0 +1,179 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__() -> bool: + block@0: // L14 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@9 + block@1: // abi_routing_L14 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "getXY()(uint64,uint64)" => block@2, method "getYX()(uint64,uint64)" => block@3, method "getAnon()(uint64,uint64)" => block@4, method "test((uint64,uint64),(uint64,uint64))void" => block@5, method "testing()((uint64,uint64),(uint64,uint64),(uint64,uint64))" => block@6, * => block@7} + block@2: // getXY_route_L15 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let (elements_to_encode%0#0: uint64, elements_to_encode%1#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getXY() + let val_as_bytes%0#0: bytes = (itob elements_to_encode%0#0) + let val_as_bytes%1#0: bytes = (itob elements_to_encode%1#0) + let current_tail_offset%0#0: uint64 = 16u + let encoded_tuple_buffer%0#0: bytes = 0x + let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) + let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%2#0) + (log tmp%7#0) + return 1u + block@3: // getYX_route_L22 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 NoOp) + (assert tmp%9#0) // OnCompletion is not NoOp + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + let (elements_to_encode%2#0: uint64, elements_to_encode%3#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getYX() + let val_as_bytes%2#0: bytes = (itob elements_to_encode%2#0) + let val_as_bytes%3#0: bytes = (itob elements_to_encode%3#0) + let current_tail_offset%1#0: uint64 = 16u + let encoded_tuple_buffer%3#0: bytes = 0x + let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 val_as_bytes%2#0) + let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) + let tmp%12#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%5#0) + (log tmp%12#0) + return 1u + block@4: // getAnon_route_L29 + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 NoOp) + (assert tmp%14#0) // OnCompletion is not NoOp + let tmp%15#0: uint64 = (txn ApplicationID) + let tmp%16#0: bool = (!= tmp%15#0 0u) + (assert tmp%16#0) // can only call when not creating + let (elements_to_encode%4#0: uint64, elements_to_encode%5#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() + let val_as_bytes%4#0: bytes = (itob elements_to_encode%4#0) + let val_as_bytes%5#0: bytes = (itob elements_to_encode%5#0) + let current_tail_offset%2#0: uint64 = 16u + let encoded_tuple_buffer%6#0: bytes = 0x + let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) + let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%5#0) + let tmp%17#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%8#0) + (log tmp%17#0) + return 1u + block@5: // test_route_L36 + let tmp%18#0: uint64 = (txn OnCompletion) + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes = (txna ApplicationArgs 1) + let item0%0#0: bytes = (extract3 tmp%22#0 0u 8u) // on error: Index access is out of bounds + let item0%0%0#0: uint64 = (btoi item0%0#0) + let item1%0#0: bytes = (extract3 tmp%22#0 8u 8u) // on error: Index access is out of bounds + let item1%0%0#0: uint64 = (btoi item1%0#0) + let tmp%23#0: bytes = (txna ApplicationArgs 2) + let item0%1#0: bytes = (extract3 tmp%23#0 0u 8u) // on error: Index access is out of bounds + let item0%1%0#0: uint64 = (btoi item0%1#0) + let item1%1#0: bytes = (extract3 tmp%23#0 8u 8u) // on error: Index access is out of bounds + let item1%1%0#0: uint64 = (btoi item1%1#0) + tests/approvals/named-types.algo.ts::MyContract.test(item0%0%0#0, item1%0%0#0, item0%1%0#0, item1%1%0#0) + return 1u + block@6: // testing_route_L40 + let tmp%24#0: uint64 = (txn OnCompletion) + let tmp%25#0: bool = (== tmp%24#0 NoOp) + (assert tmp%25#0) // OnCompletion is not NoOp + let tmp%26#0: uint64 = (txn ApplicationID) + let tmp%27#0: bool = (!= tmp%26#0 0u) + (assert tmp%27#0) // can only call when not creating + let (elements_to_encode%6#0: uint64, elements_to_encode%7#0: uint64, elements_to_encode%8#0: uint64, elements_to_encode%9#0: uint64, elements_to_encode%10#0: uint64, elements_to_encode%11#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.testing() + let val_as_bytes%6#0: bytes = (itob elements_to_encode%6#0) + let val_as_bytes%7#0: bytes = (itob elements_to_encode%7#0) + let current_tail_offset%3#0: uint64 = 16u + let encoded_tuple_buffer%9#0: bytes = 0x + let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%6#0) + let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%7#0) + let val_as_bytes%8#0: bytes = (itob elements_to_encode%8#0) + let val_as_bytes%9#0: bytes = (itob elements_to_encode%9#0) + let current_tail_offset%4#0: uint64 = 16u + let encoded_tuple_buffer%12#0: bytes = 0x + let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 val_as_bytes%8#0) + let encoded_tuple_buffer%14#0: bytes = (concat encoded_tuple_buffer%13#0 val_as_bytes%9#0) + let val_as_bytes%10#0: bytes = (itob elements_to_encode%10#0) + let val_as_bytes%11#0: bytes = (itob elements_to_encode%11#0) + let current_tail_offset%5#0: uint64 = 16u + let encoded_tuple_buffer%15#0: bytes = 0x + let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 val_as_bytes%10#0) + let encoded_tuple_buffer%17#0: bytes = (concat encoded_tuple_buffer%16#0 val_as_bytes%11#0) + let current_tail_offset%6#0: uint64 = 48u + let encoded_tuple_buffer%18#0: bytes = 0x + let encoded_tuple_buffer%19#0: bytes = (concat encoded_tuple_buffer%18#0 encoded_tuple_buffer%11#0) + let encoded_tuple_buffer%20#0: bytes = (concat encoded_tuple_buffer%19#0 encoded_tuple_buffer%14#0) + let encoded_tuple_buffer%21#0: bytes = (concat encoded_tuple_buffer%20#0 encoded_tuple_buffer%17#0) + let tmp%28#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%21#0) + (log tmp%28#0) + return 1u + block@7: // switch_case_default_L14 + goto block@8 + block@8: // switch_case_next_L14 + goto block@13 + block@9: // bare_routing_L14 + let tmp%29#0: uint64 = (txn OnCompletion) + switch tmp%29#0 {0u => block@10, * => block@11} + block@10: // __algots__.defaultCreate_L14 + let tmp%30#0: uint64 = (txn ApplicationID) + let tmp%31#0: bool = (== tmp%30#0 0u) + (assert tmp%31#0) // can only call when creating + tests/approvals/named-types.algo.ts::MyContract.__algots__.defaultCreate() + return 1u + block@11: // switch_case_default_L14 + goto block@12 + block@12: // switch_case_next_L14 + goto block@13 + block@13: // after_if_else_L14 + return 0u + +subroutine tests/approvals/named-types.algo.ts::MyContract.getXY() -> : + block@0: // L15 + return 1u 2u + +subroutine tests/approvals/named-types.algo.ts::MyContract.getYX() -> : + block@0: // L22 + return 111u 222u + +subroutine tests/approvals/named-types.algo.ts::MyContract.getAnon() -> : + block@0: // L29 + return 3u 4u + +subroutine tests/approvals/named-types.algo.ts::MyContract.test(x.x: uint64, x.y: uint64, y.y: uint64, y.x: uint64) -> void: + block@0: // L36 + let tmp%0#0: bool = (== x.y#0 y.y#0) + goto tmp%0#0 ? block@1 : block@3 + block@1: // and_contd_L37 + let tmp%1#0: bool = (== x.x#0 y.x#0) + goto tmp%1#0 ? block@2 : block@3 + block@2: // bool_true_L37 + let and_result%0#0: bool = 1u + goto block@4 + block@3: // bool_false_L37 + let and_result%0#1: bool = 0u + goto block@4 + block@4: // bool_merge_L37 + let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) + (assert and_result%0#2) // assert target is match for conditions + return + +subroutine tests/approvals/named-types.algo.ts::MyContract.testing() -> : + block@0: // L40 + let (a.x#0: uint64, a.y#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getXY() + let (b.y#0: uint64, b.x#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getYX() + let (awst_tmp%0#0: uint64, awst_tmp%1#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() + let (awst_tmp%2#0: uint64, awst_tmp%3#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() + let (c.x#0: uint64, c.y#0: uint64) = (awst_tmp%0#0, awst_tmp%3#0) + return a.x#0 a.y#0 b.y#0 b.x#0 c.x#0 c.y#0 + +subroutine tests/approvals/named-types.algo.ts::MyContract.__algots__.defaultCreate() -> void: + block@0: // L14 + return \ No newline at end of file diff --git a/tests/approvals/out/named-types/MyContract.ir/MyContract.clear.0.ssa.ir b/tests/approvals/out/named-types/MyContract.ir/MyContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/named-types/MyContract.ir/MyContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/named-types/MyContract.ssa.ir b/tests/approvals/out/named-types/MyContract.ssa.ir deleted file mode 100644 index ca1294c7..00000000 --- a/tests/approvals/out/named-types/MyContract.ssa.ir +++ /dev/null @@ -1,186 +0,0 @@ -contract tests/approvals/named-types.algo.ts::MyContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/named-types.algo.ts::MyContract.__puya_arc4_router__() -> bool: - block@0: // L14 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@9 - block@1: // abi_routing_L14 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getXY()(uint64,uint64)" => block@2, method "getYX()(uint64,uint64)" => block@3, method "getAnon()(uint64,uint64)" => block@4, method "test((uint64,uint64),(uint64,uint64))void" => block@5, method "testing()((uint64,uint64),(uint64,uint64),(uint64,uint64))" => block@6, * => block@7} - block@2: // getXY_route_L15 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let (elements_to_encode%0#0: uint64, elements_to_encode%1#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getXY() - let val_as_bytes%0#0: bytes = (itob elements_to_encode%0#0) - let val_as_bytes%1#0: bytes = (itob elements_to_encode%1#0) - let current_tail_offset%0#0: uint64 = 16u - let encoded_tuple_buffer%0#0: bytes = 0x - let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 val_as_bytes%0#0) - let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 val_as_bytes%1#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%2#0) - (log tmp%7#0) - return 1u - block@3: // getYX_route_L22 - let tmp%8#0: uint64 = (txn OnCompletion) - let tmp%9#0: bool = (== tmp%8#0 NoOp) - (assert tmp%9#0) // OnCompletion is not NoOp - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (!= tmp%10#0 0u) - (assert tmp%11#0) // can only call when not creating - let (elements_to_encode%2#0: uint64, elements_to_encode%3#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getYX() - let val_as_bytes%2#0: bytes = (itob elements_to_encode%2#0) - let val_as_bytes%3#0: bytes = (itob elements_to_encode%3#0) - let current_tail_offset%1#0: uint64 = 16u - let encoded_tuple_buffer%3#0: bytes = 0x - let encoded_tuple_buffer%4#0: bytes = (concat encoded_tuple_buffer%3#0 val_as_bytes%2#0) - let encoded_tuple_buffer%5#0: bytes = (concat encoded_tuple_buffer%4#0 val_as_bytes%3#0) - let tmp%12#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%5#0) - (log tmp%12#0) - return 1u - block@4: // getAnon_route_L29 - let tmp%13#0: uint64 = (txn OnCompletion) - let tmp%14#0: bool = (== tmp%13#0 NoOp) - (assert tmp%14#0) // OnCompletion is not NoOp - let tmp%15#0: uint64 = (txn ApplicationID) - let tmp%16#0: bool = (!= tmp%15#0 0u) - (assert tmp%16#0) // can only call when not creating - let (elements_to_encode%4#0: uint64, elements_to_encode%5#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() - let val_as_bytes%4#0: bytes = (itob elements_to_encode%4#0) - let val_as_bytes%5#0: bytes = (itob elements_to_encode%5#0) - let current_tail_offset%2#0: uint64 = 16u - let encoded_tuple_buffer%6#0: bytes = 0x - let encoded_tuple_buffer%7#0: bytes = (concat encoded_tuple_buffer%6#0 val_as_bytes%4#0) - let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 val_as_bytes%5#0) - let tmp%17#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%8#0) - (log tmp%17#0) - return 1u - block@5: // test_route_L36 - let tmp%18#0: uint64 = (txn OnCompletion) - let tmp%19#0: bool = (== tmp%18#0 NoOp) - (assert tmp%19#0) // OnCompletion is not NoOp - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (!= tmp%20#0 0u) - (assert tmp%21#0) // can only call when not creating - let tmp%22#0: bytes = (txna ApplicationArgs 1) - let item0%0#0: bytes = (extract3 tmp%22#0 0u 8u) // on error: Index access is out of bounds - let item0%0%0#0: uint64 = (btoi item0%0#0) - let item1%0#0: bytes = (extract3 tmp%22#0 8u 8u) // on error: Index access is out of bounds - let item1%0%0#0: uint64 = (btoi item1%0#0) - let tmp%23#0: bytes = (txna ApplicationArgs 2) - let item0%1#0: bytes = (extract3 tmp%23#0 0u 8u) // on error: Index access is out of bounds - let item0%1%0#0: uint64 = (btoi item0%1#0) - let item1%1#0: bytes = (extract3 tmp%23#0 8u 8u) // on error: Index access is out of bounds - let item1%1%0#0: uint64 = (btoi item1%1#0) - tests/approvals/named-types.algo.ts::MyContract.test(item0%0%0#0, item1%0%0#0, item0%1%0#0, item1%1%0#0) - return 1u - block@6: // testing_route_L40 - let tmp%24#0: uint64 = (txn OnCompletion) - let tmp%25#0: bool = (== tmp%24#0 NoOp) - (assert tmp%25#0) // OnCompletion is not NoOp - let tmp%26#0: uint64 = (txn ApplicationID) - let tmp%27#0: bool = (!= tmp%26#0 0u) - (assert tmp%27#0) // can only call when not creating - let (elements_to_encode%6#0: uint64, elements_to_encode%7#0: uint64, elements_to_encode%8#0: uint64, elements_to_encode%9#0: uint64, elements_to_encode%10#0: uint64, elements_to_encode%11#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.testing() - let val_as_bytes%6#0: bytes = (itob elements_to_encode%6#0) - let val_as_bytes%7#0: bytes = (itob elements_to_encode%7#0) - let current_tail_offset%3#0: uint64 = 16u - let encoded_tuple_buffer%9#0: bytes = 0x - let encoded_tuple_buffer%10#0: bytes = (concat encoded_tuple_buffer%9#0 val_as_bytes%6#0) - let encoded_tuple_buffer%11#0: bytes = (concat encoded_tuple_buffer%10#0 val_as_bytes%7#0) - let val_as_bytes%8#0: bytes = (itob elements_to_encode%8#0) - let val_as_bytes%9#0: bytes = (itob elements_to_encode%9#0) - let current_tail_offset%4#0: uint64 = 16u - let encoded_tuple_buffer%12#0: bytes = 0x - let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 val_as_bytes%8#0) - let encoded_tuple_buffer%14#0: bytes = (concat encoded_tuple_buffer%13#0 val_as_bytes%9#0) - let val_as_bytes%10#0: bytes = (itob elements_to_encode%10#0) - let val_as_bytes%11#0: bytes = (itob elements_to_encode%11#0) - let current_tail_offset%5#0: uint64 = 16u - let encoded_tuple_buffer%15#0: bytes = 0x - let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 val_as_bytes%10#0) - let encoded_tuple_buffer%17#0: bytes = (concat encoded_tuple_buffer%16#0 val_as_bytes%11#0) - let current_tail_offset%6#0: uint64 = 48u - let encoded_tuple_buffer%18#0: bytes = 0x - let encoded_tuple_buffer%19#0: bytes = (concat encoded_tuple_buffer%18#0 encoded_tuple_buffer%11#0) - let encoded_tuple_buffer%20#0: bytes = (concat encoded_tuple_buffer%19#0 encoded_tuple_buffer%14#0) - let encoded_tuple_buffer%21#0: bytes = (concat encoded_tuple_buffer%20#0 encoded_tuple_buffer%17#0) - let tmp%28#0: bytes = (concat 0x151f7c75 encoded_tuple_buffer%21#0) - (log tmp%28#0) - return 1u - block@7: // switch_case_default_L14 - goto block@8 - block@8: // switch_case_next_L14 - goto block@13 - block@9: // bare_routing_L14 - let tmp%29#0: uint64 = (txn OnCompletion) - switch tmp%29#0 {0u => block@10, * => block@11} - block@10: // __algots__.defaultCreate_L14 - let tmp%30#0: uint64 = (txn ApplicationID) - let tmp%31#0: bool = (== tmp%30#0 0u) - (assert tmp%31#0) // can only call when creating - tests/approvals/named-types.algo.ts::MyContract.__algots__.defaultCreate() - return 1u - block@11: // switch_case_default_L14 - goto block@12 - block@12: // switch_case_next_L14 - goto block@13 - block@13: // after_if_else_L14 - return 0u - - subroutine tests/approvals/named-types.algo.ts::MyContract.getXY() -> : - block@0: // L15 - return 1u 2u - - subroutine tests/approvals/named-types.algo.ts::MyContract.getYX() -> : - block@0: // L22 - return 111u 222u - - subroutine tests/approvals/named-types.algo.ts::MyContract.getAnon() -> : - block@0: // L29 - return 3u 4u - - subroutine tests/approvals/named-types.algo.ts::MyContract.test(x.x: uint64, x.y: uint64, y.y: uint64, y.x: uint64) -> void: - block@0: // L36 - let tmp%0#0: bool = (== x.y#0 y.y#0) - goto tmp%0#0 ? block@1 : block@3 - block@1: // and_contd_L37 - let tmp%1#0: bool = (== x.x#0 y.x#0) - goto tmp%1#0 ? block@2 : block@3 - block@2: // bool_true_L37 - let and_result%0#0: bool = 1u - goto block@4 - block@3: // bool_false_L37 - let and_result%0#1: bool = 0u - goto block@4 - block@4: // bool_merge_L37 - let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) - (assert and_result%0#2) // assert target is match for conditions - return - - subroutine tests/approvals/named-types.algo.ts::MyContract.testing() -> : - block@0: // L40 - let (a.x#0: uint64, a.y#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getXY() - let (b.y#0: uint64, b.x#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getYX() - let (awst_tmp%0#0: uint64, awst_tmp%1#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() - let (awst_tmp%2#0: uint64, awst_tmp%3#0: uint64) = tests/approvals/named-types.algo.ts::MyContract.getAnon() - let (c.x#0: uint64, c.y#0: uint64) = (awst_tmp%0#0, awst_tmp%3#0) - return a.x#0 a.y#0 b.y#0 b.x#0 c.x#0 c.y#0 - - subroutine tests/approvals/named-types.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L14 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/non-arc4/HelloWorldContract.approval.teal b/tests/approvals/out/non-arc4/HelloWorldContract.approval.teal index aeaf0b5f..e75805c7 100644 --- a/tests/approvals/out/non-arc4/HelloWorldContract.approval.teal +++ b/tests/approvals/out/non-arc4/HelloWorldContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/non-arc4.algo.ts::HelloWorldContract.approvalProgram: +// tests/approvals/non-arc4.algo.ts::HelloWorldContract.approvalProgram() -> uint64: +main: // tests/approvals/non-arc4.algo.ts:5 // const name = String(op.Txn.applicationArgs(0)) pushint 0 // 0 diff --git a/tests/approvals/out/non-arc4/HelloWorldContract.clear.teal b/tests/approvals/out/non-arc4/HelloWorldContract.clear.teal index 095a92a3..a4d58047 100644 --- a/tests/approvals/out/non-arc4/HelloWorldContract.clear.teal +++ b/tests/approvals/out/non-arc4/HelloWorldContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/non-arc4.algo.ts::HelloWorldContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.approval.0.ssa.ir b/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.approval.0.ssa.ir new file mode 100644 index 00000000..c79f1739 --- /dev/null +++ b/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.approval.0.ssa.ir @@ -0,0 +1,6 @@ +main tests/approvals/non-arc4.algo.ts::HelloWorldContract.approvalProgram: + block@0: // L4 + let name#0: bytes = ((txnas ApplicationArgs) 0u) + let tmp%0#0: bytes = (concat "Hello, " name#0) + (log tmp%0#0) + return 1u \ No newline at end of file diff --git a/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.clear.0.ssa.ir b/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/non-arc4/HelloWorldContract.ir/HelloWorldContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/non-arc4/HelloWorldContract.ssa.ir b/tests/approvals/out/non-arc4/HelloWorldContract.ssa.ir deleted file mode 100644 index 947b9a80..00000000 --- a/tests/approvals/out/non-arc4/HelloWorldContract.ssa.ir +++ /dev/null @@ -1,13 +0,0 @@ -contract tests/approvals/non-arc4.algo.ts::HelloWorldContract: - program approval: - subroutine tests/approvals/non-arc4.algo.ts::HelloWorldContract.approvalProgram() -> bool: - block@0: // L4 - let name#0: bytes = ((txnas ApplicationArgs) 0u) - let tmp%0#0: bytes = (concat "Hello, " name#0) - (log tmp%0#0) - return 1u - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/pre-approved-sale/PreApprovedSale.ir/PreApprovedSale.0.ssa.ir b/tests/approvals/out/pre-approved-sale/PreApprovedSale.ir/PreApprovedSale.0.ssa.ir new file mode 100644 index 00000000..aecbfcb9 --- /dev/null +++ b/tests/approvals/out/pre-approved-sale/PreApprovedSale.ir/PreApprovedSale.0.ssa.ir @@ -0,0 +1,54 @@ +main tests/approvals/pre-approved-sale.algo.ts::program: + block@0: // L11 + let seller#0: bytes = TemplateVar[bytes](TMPL_SELLER) + let price#0: uint64 = TemplateVar[uint64](TMPL_PRICE) + let asset#0: uint64 = TemplateVar[uint64](TMPL_ASSET) + let payTxn#0: uint64 = 0u + let assetTxn#0: uint64 = 1u + let tmp%0#0: bytes = ((gtxns Receiver) payTxn#0) + let tmp%1#0: bool = (== tmp%0#0 seller#0) + goto tmp%1#0 ? block@1 : block@3 + block@1: // and_contd_L18 + let tmp%2#0: uint64 = ((gtxns Amount) payTxn#0) + let tmp%3#0: bool = (== tmp%2#0 price#0) + goto tmp%3#0 ? block@2 : block@3 + block@2: // bool_true_L18 + let and_result%0#0: bool = 1u + goto block@4 + block@3: // bool_false_L18 + let and_result%0#1: bool = 0u + goto block@4 + block@4: // bool_merge_L18 + let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) + (assert and_result%0#2) // assert target is match for conditions + let tmp%4#0: uint64 = ((gtxns AssetAmount) assetTxn#0) + let tmp%5#0: bool = (== tmp%4#0 1u) + goto tmp%5#0 ? block@5 : block@10 + block@5: // and_contd_L23 + let tmp%6#0: bytes = ((gtxns Sender) assetTxn#0) + let tmp%7#0: bool = (== tmp%6#0 seller#0) + goto tmp%7#0 ? block@6 : block@10 + block@6: // and_contd_L23 + let tmp%8#0: uint64 = ((gtxns XferAsset) assetTxn#0) + let tmp%9#0: bool = (== tmp%8#0 asset#0) + goto tmp%9#0 ? block@7 : block@10 + block@7: // and_contd_L23 + let tmp%10#0: bytes = ((gtxns AssetCloseTo) assetTxn#0) + let tmp%11#0: bytes = (global ZeroAddress) + let tmp%12#0: bool = (== tmp%10#0 tmp%11#0) + goto tmp%12#0 ? block@8 : block@10 + block@8: // and_contd_L23 + let tmp%13#0: bytes = ((gtxns RekeyTo) assetTxn#0) + let tmp%14#0: bytes = (global ZeroAddress) + let tmp%15#0: bool = (== tmp%13#0 tmp%14#0) + goto tmp%15#0 ? block@9 : block@10 + block@9: // bool_true_L23 + let and_result%1#0: bool = 1u + goto block@11 + block@10: // bool_false_L23 + let and_result%1#1: bool = 0u + goto block@11 + block@11: // bool_merge_L23 + let and_result%1#2: bool = φ(and_result%1#0 <- block@9, and_result%1#1 <- block@10) + (assert and_result%1#2) // assert target is match for conditions + return 1u \ No newline at end of file diff --git a/tests/approvals/out/pre-approved-sale/PreApprovedSale.ssa.ir b/tests/approvals/out/pre-approved-sale/PreApprovedSale.ssa.ir deleted file mode 100644 index 60afa8bf..00000000 --- a/tests/approvals/out/pre-approved-sale/PreApprovedSale.ssa.ir +++ /dev/null @@ -1,55 +0,0 @@ -program logicsig tests/approvals/pre-approved-sale.algo.ts::PreApprovedSale: - subroutine tests/approvals/pre-approved-sale.algo.ts::program() -> bool: - block@0: // L11 - let seller#0: bytes = TemplateVar[bytes](TMPL_SELLER) - let price#0: uint64 = TemplateVar[uint64](TMPL_PRICE) - let asset#0: uint64 = TemplateVar[uint64](TMPL_ASSET) - let payTxn#0: uint64 = 0u - let assetTxn#0: uint64 = 1u - let tmp%0#0: bytes = ((gtxns Receiver) payTxn#0) - let tmp%1#0: bool = (== tmp%0#0 seller#0) - goto tmp%1#0 ? block@1 : block@3 - block@1: // and_contd_L18 - let tmp%2#0: uint64 = ((gtxns Amount) payTxn#0) - let tmp%3#0: bool = (== tmp%2#0 price#0) - goto tmp%3#0 ? block@2 : block@3 - block@2: // bool_true_L18 - let and_result%0#0: bool = 1u - goto block@4 - block@3: // bool_false_L18 - let and_result%0#1: bool = 0u - goto block@4 - block@4: // bool_merge_L18 - let and_result%0#2: bool = φ(and_result%0#0 <- block@2, and_result%0#1 <- block@3) - (assert and_result%0#2) // assert target is match for conditions - let tmp%4#0: uint64 = ((gtxns AssetAmount) assetTxn#0) - let tmp%5#0: bool = (== tmp%4#0 1u) - goto tmp%5#0 ? block@5 : block@10 - block@5: // and_contd_L23 - let tmp%6#0: bytes = ((gtxns Sender) assetTxn#0) - let tmp%7#0: bool = (== tmp%6#0 seller#0) - goto tmp%7#0 ? block@6 : block@10 - block@6: // and_contd_L23 - let tmp%8#0: uint64 = ((gtxns XferAsset) assetTxn#0) - let tmp%9#0: bool = (== tmp%8#0 asset#0) - goto tmp%9#0 ? block@7 : block@10 - block@7: // and_contd_L23 - let tmp%10#0: bytes = ((gtxns AssetCloseTo) assetTxn#0) - let tmp%11#0: bytes = (global ZeroAddress) - let tmp%12#0: bool = (== tmp%10#0 tmp%11#0) - goto tmp%12#0 ? block@8 : block@10 - block@8: // and_contd_L23 - let tmp%13#0: bytes = ((gtxns RekeyTo) assetTxn#0) - let tmp%14#0: bytes = (global ZeroAddress) - let tmp%15#0: bool = (== tmp%13#0 tmp%14#0) - goto tmp%15#0 ? block@9 : block@10 - block@9: // bool_true_L23 - let and_result%1#0: bool = 1u - goto block@11 - block@10: // bool_false_L23 - let and_result%1#1: bool = 0u - goto block@11 - block@11: // bool_merge_L23 - let and_result%1#2: bool = φ(and_result%1#0 <- block@9, and_result%1#1 <- block@10) - (assert and_result%1#2) // assert target is match for conditions - return 1u \ No newline at end of file diff --git a/tests/approvals/out/pre-approved-sale/PreApprovedSale.teal b/tests/approvals/out/pre-approved-sale/PreApprovedSale.teal index 442f7ee1..8f4a2b9a 100644 --- a/tests/approvals/out/pre-approved-sale/PreApprovedSale.teal +++ b/tests/approvals/out/pre-approved-sale/PreApprovedSale.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/pre-approved-sale.algo.ts::PreApprovedSale: +// tests/approvals/pre-approved-sale.algo.ts::program() -> uint64: +main: intcblock 1 0 TMPL_PRICE TMPL_ASSET bytecblock TMPL_SELLER // tests/approvals/pre-approved-sale.algo.ts:12 @@ -26,6 +28,8 @@ tests/approvals/pre-approved-sale.algo.ts::PreApprovedSale: gtxns Receiver == bz main_bool_false@3 + +main_and_contd@1: // tests/approvals/pre-approved-sale.algo.ts:16 // const payTxn = gtxn.PaymentTxn(0) intc_1 // 0 @@ -38,11 +42,9 @@ tests/approvals/pre-approved-sale.algo.ts::PreApprovedSale: dig 2 == bz main_bool_false@3 - intc_0 // 1 - b main_bool_merge@4 -main_bool_false@3: - intc_1 // 0 +main_bool_true@2: + intc_0 // 1 main_bool_merge@4: // tests/approvals/pre-approved-sale.algo.ts:18-21 @@ -76,6 +78,8 @@ main_bool_merge@4: // }) == bz main_bool_false@10 + +main_and_contd@5: // tests/approvals/pre-approved-sale.algo.ts:17 // const assetTxn = gtxn.AssetTransferTxn(1) intc_0 // 1 @@ -91,6 +95,8 @@ main_bool_merge@4: dig 3 == bz main_bool_false@10 + +main_and_contd@6: // tests/approvals/pre-approved-sale.algo.ts:17 // const assetTxn = gtxn.AssetTransferTxn(1) intc_0 // 1 @@ -106,6 +112,8 @@ main_bool_merge@4: dig 1 == bz main_bool_false@10 + +main_and_contd@7: // tests/approvals/pre-approved-sale.algo.ts:17 // const assetTxn = gtxn.AssetTransferTxn(1) intc_0 // 1 @@ -131,6 +139,8 @@ main_bool_merge@4: // }) == bz main_bool_false@10 + +main_and_contd@8: // tests/approvals/pre-approved-sale.algo.ts:17 // const assetTxn = gtxn.AssetTransferTxn(1) intc_0 // 1 @@ -156,11 +166,9 @@ main_bool_merge@4: // }) == bz main_bool_false@10 - intc_0 // 1 - b main_bool_merge@11 -main_bool_false@10: - intc_1 // 0 +main_bool_true@9: + intc_0 // 1 main_bool_merge@11: // tests/approvals/pre-approved-sale.algo.ts:23-29 @@ -176,3 +184,11 @@ main_bool_merge@11: // return true intc_0 // 1 return + +main_bool_false@10: + intc_1 // 0 + b main_bool_merge@11 + +main_bool_false@3: + intc_1 // 0 + b main_bool_merge@4 diff --git a/tests/approvals/out/precompiled-apps/Hello.approval.teal b/tests/approvals/out/precompiled-apps/Hello.approval.teal index 50d50d56..4872d624 100644 --- a/tests/approvals/out/precompiled-apps/Hello.approval.teal +++ b/tests/approvals/out/precompiled-apps/Hello.approval.teal @@ -1,139 +1,145 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::Hello.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "greeting" "" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - - -// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: -constructor: - // tests/approvals/precompiled-apps.algo.ts:3 - // abstract class HelloBase extends Contract { - proto 0 0 - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - bytec_1 // "" - app_global_put - retsub - -// tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/precompiled-apps.algo.ts:17 // export class Hello extends HelloBase { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@8 + bz main_bare_routing@11 + +main_abi_routing@4: + // tests/approvals/precompiled-apps.algo.ts:17 + // export class Hello extends HelloBase { txna ApplicationArgs 0 pushbytes 0x20df3a54 // method "create(string)void" pushbytes 0x24378d3c // method "delete()void" pushbytes 0xa0e81872 // method "update()void" pushbytes 0xd0a28200 // method "greet(string)string" uncover 4 - match __puya_arc4_router___create_route@2 __puya_arc4_router___delete_route@3 __puya_arc4_router___update_route@4 __puya_arc4_router___greet_route@5 - b __puya_arc4_router___switch_case_default@6 + match main_create_route@5 main_delete_route@6 main_update_route@7 main_greet_route@8 -__puya_arc4_router___create_route@2: - // tests/approvals/precompiled-apps.algo.ts:18 - // @abimethod({ onCreate: 'require' }) +main_switch_case_default@9: + +main_switch_case_next@10: + +main_after_if_else@12: + // tests/approvals/precompiled-apps.algo.ts:17 + // export class Hello extends HelloBase { + intc_0 // 0 + +main_after_inlined_tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__@13: + return + +main_greet_route@8: + // tests/approvals/precompiled-apps.algo.ts:12 + // greet(name: string): string { txn OnCompletion intc_0 // NoOp == assert // OnCompletion is not NoOp txn ApplicationID intc_0 // 0 - == - assert // can only call when creating + != + assert // can only call when not creating // tests/approvals/precompiled-apps.algo.ts:17 // export class Hello extends HelloBase { txna ApplicationArgs 1 extract 2 0 - // tests/approvals/precompiled-apps.algo.ts:18 - // @abimethod({ onCreate: 'require' }) - callsub create + // tests/approvals/precompiled-apps.algo.ts:12 + // greet(name: string): string { + callsub greet + dup + len + itob + extract 6 2 + swap + concat + pushbytes 0x151f7c75 + swap + concat + log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__@13 -__puya_arc4_router___delete_route@3: - // tests/approvals/precompiled-apps.algo.ts:6 - // @abimethod({ allowActions: 'DeleteApplication' }) +main_update_route@7: + // tests/approvals/precompiled-apps.algo.ts:9 + // @abimethod({ allowActions: 'UpdateApplication' }) txn OnCompletion - pushint 5 // DeleteApplication + pushint 4 // UpdateApplication == - assert // OnCompletion is not DeleteApplication + assert // OnCompletion is not UpdateApplication txn ApplicationID intc_0 // 0 != assert // can only call when not creating - callsub delete + callsub update intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__@13 -__puya_arc4_router___update_route@4: - // tests/approvals/precompiled-apps.algo.ts:9 - // @abimethod({ allowActions: 'UpdateApplication' }) +main_delete_route@6: + // tests/approvals/precompiled-apps.algo.ts:6 + // @abimethod({ allowActions: 'DeleteApplication' }) txn OnCompletion - pushint 4 // UpdateApplication + pushint 5 // DeleteApplication == - assert // OnCompletion is not UpdateApplication + assert // OnCompletion is not DeleteApplication txn ApplicationID intc_0 // 0 != assert // can only call when not creating - callsub update + callsub delete intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__@13 -__puya_arc4_router___greet_route@5: - // tests/approvals/precompiled-apps.algo.ts:12 - // greet(name: string): string { +main_create_route@5: + // tests/approvals/precompiled-apps.algo.ts:18 + // @abimethod({ onCreate: 'require' }) txn OnCompletion intc_0 // NoOp == assert // OnCompletion is not NoOp txn ApplicationID intc_0 // 0 - != - assert // can only call when not creating + == + assert // can only call when creating // tests/approvals/precompiled-apps.algo.ts:17 // export class Hello extends HelloBase { txna ApplicationArgs 1 extract 2 0 - // tests/approvals/precompiled-apps.algo.ts:12 - // greet(name: string): string { - callsub greet - dup - len - itob - extract 6 2 - swap - concat - pushbytes 0x151f7c75 - swap - concat - log + // tests/approvals/precompiled-apps.algo.ts:18 + // @abimethod({ onCreate: 'require' }) + callsub create intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@6: - b __puya_arc4_router___after_if_else@9 +main_bare_routing@11: + b main_after_if_else@12 -__puya_arc4_router___bare_routing@8: -__puya_arc4_router___after_if_else@9: - // tests/approvals/precompiled-apps.algo.ts:17 - // export class Hello extends HelloBase { - intc_0 // 0 +// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: +constructor: + // tests/approvals/precompiled-apps.algo.ts:3 + // abstract class HelloBase extends Contract { + proto 0 0 + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + bytec_1 // "" + app_global_put retsub diff --git a/tests/approvals/out/precompiled-apps/Hello.arc32.json b/tests/approvals/out/precompiled-apps/Hello.arc32.json index f4ff323c..df90ead9 100644 --- a/tests/approvals/out/precompiled-apps/Hello.arc32.json +++ b/tests/approvals/out/precompiled-apps/Hello.arc32.json @@ -22,8 +22,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDIwZGYzYTU0IC8vIG1ldGhvZCAiY3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZGVsZXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fZ3JlZXRfcm91dGVANQogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDYKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgY2FsbHN1YiBjcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX191cGRhdGVfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgVXBkYXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHVwZGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ3JlZXRfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLmNyZWF0ZShncmVldGluZzogYnl0ZXMpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBjcmVhdGUoZ3JlZXRpbmc6IHN0cmluZykgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBncmVldGluZwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMGRmM2E1NCAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9ncmVldF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl91cGRhdGVfcm91dGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgVXBkYXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHVwZGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2RlbGV0ZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2LTcKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIGRlbGV0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS51cGRhdGUoKSAtPiB2b2lkOgp1cGRhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjktMTAKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHVwZGF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/precompiled-apps/Hello.arc56.json b/tests/approvals/out/precompiled-apps/Hello.arc56.json index 47023362..1d0b33a3 100644 --- a/tests/approvals/out/precompiled-apps/Hello.arc56.json +++ b/tests/approvals/out/precompiled-apps/Hello.arc56.json @@ -119,40 +119,40 @@ "sourceInfo": [ { "pc": [ - 114 + 136 ], "errorMessage": "OnCompletion is not DeleteApplication" }, { "pc": [ - 92, - 145 + 77, + 153 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 130 + 118 ], "errorMessage": "OnCompletion is not UpdateApplication" }, { "pc": [ - 97 + 158 ], "errorMessage": "can only call when creating" }, { "pc": [ - 119, - 135, - 150 + 82, + 123, + 141 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 206 + 204 ], "errorMessage": "check GlobalState exists" } @@ -165,8 +165,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDIwZGYzYTU0IC8vIG1ldGhvZCAiY3JlYXRlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMGU4MTg3MiAvLyBtZXRob2QgInVwZGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweGQwYTI4MjAwIC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fY3JlYXRlX3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZGVsZXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fZ3JlZXRfcm91dGVANQogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDYKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxNwogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgY2FsbHN1YiBjcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX191cGRhdGVfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgVXBkYXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHVwZGF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZ3JlZXRfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLmNyZWF0ZShncmVldGluZzogYnl0ZXMpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgtMTkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICAvLyBjcmVhdGUoZ3JlZXRpbmc6IHN0cmluZykgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjAKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBncmVldGluZwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKCm1haW5faWZfYm9keUAxOgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CgptYWluX2Jsb2NrQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTEKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyMGRmM2E1NCAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9ncmVldF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsbyBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsby5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl91cGRhdGVfcm91dGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgVXBkYXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHVwZGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2RlbGV0ZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG8gZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG8uY3JlYXRlKGdyZWV0aW5nOiBieXRlcykgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxOC0xOQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZShncmVldGluZzogc3RyaW5nKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyMAogICAgLy8gdGhpcy5ncmVldGluZy52YWx1ZSA9IGdyZWV0aW5nCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo2LTcKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIGRlbGV0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS51cGRhdGUoKSAtPiB2b2lkOgp1cGRhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjktMTAKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIHVwZGF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5ncmVldChuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmdyZWV0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBieXRlY18xIC8vICIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAiICIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAghncmVldGluZwAxGEAAA4gAljEbIhNBAIw2GgCABCDfOlSABCQ3jTyABKDoGHKABNCiggBPBI4EAE4APAAqAAIiQzEZIhJEMRgiE0Q2GgFXAgCIAGpJFRZXBgJMUIAEFR98dUxQsCNC/9cxGYEEEkQxGCITRIgAQyNC/8UxGYEFEkQxGCITRIgALSNC/7MxGSISRDEYIhJENhoBVwIAiAAOI0L/nEL/mIoAACgpZ4mKAQAoi/9niYoAAImKAACJigEBIihlRClMUIABIFCL/1CJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/precompiled-apps/Hello.clear.teal b/tests/approvals/out/precompiled-apps/Hello.clear.teal index a33c7923..a4d58047 100644 --- a/tests/approvals/out/precompiled-apps/Hello.clear.teal +++ b/tests/approvals/out/precompiled-apps/Hello.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::Hello.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir b/tests/approvals/out/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir new file mode 100644 index 00000000..d803249e --- /dev/null +++ b/tests/approvals/out/precompiled-apps/Hello.ir/Hello.approval.0.ssa.ir @@ -0,0 +1,100 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: + block@0: // L3 + (app_global_put "greeting" "") + return + +subroutine tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__() -> bool: + block@0: // L17 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L17 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "create(string)void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} + block@2: // create_route_L18 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: bytes = ((extract 2 0) tmp%7#0) + tests/approvals/precompiled-apps.algo.ts::Hello.create(tmp%8#0) + return 1u + block@3: // delete_route_L6 + let tmp%9#0: uint64 = (txn OnCompletion) + let tmp%10#0: bool = (== tmp%9#0 DeleteApplication) + (assert tmp%10#0) // OnCompletion is not DeleteApplication + let tmp%11#0: uint64 = (txn ApplicationID) + let tmp%12#0: bool = (!= tmp%11#0 0u) + (assert tmp%12#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() + return 1u + block@4: // update_route_L9 + let tmp%13#0: uint64 = (txn OnCompletion) + let tmp%14#0: bool = (== tmp%13#0 UpdateApplication) + (assert tmp%14#0) // OnCompletion is not UpdateApplication + let tmp%15#0: uint64 = (txn ApplicationID) + let tmp%16#0: bool = (!= tmp%15#0 0u) + (assert tmp%16#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.update() + return 1u + block@5: // greet_route_L12 + let tmp%17#0: uint64 = (txn OnCompletion) + let tmp%18#0: bool = (== tmp%17#0 NoOp) + (assert tmp%18#0) // OnCompletion is not NoOp + let tmp%19#0: uint64 = (txn ApplicationID) + let tmp%20#0: bool = (!= tmp%19#0 0u) + (assert tmp%20#0) // can only call when not creating + let tmp%21#0: bytes = (txna ApplicationArgs 1) + let tmp%22#0: bytes = ((extract 2 0) tmp%21#0) + let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%22#0) + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%23#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%23#0) + return 1u + block@6: // switch_case_default_L17 + goto block@7 + block@7: // switch_case_next_L17 + goto block@9 + block@8: // bare_routing_L17 + goto block@9 + block@9: // after_if_else_L17 + return 0u + +subroutine tests/approvals/precompiled-apps.algo.ts::Hello.create(greeting: bytes) -> void: + block@0: // L18 + (app_global_put "greeting" greeting#0) + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: + block@0: // L6 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: + block@0: // L9 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: + block@0: // L12 + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bytes = (concat "" maybe_value%0#0) + let tmp%1#0: bytes = (concat tmp%0#0 " ") + let tmp%2#0: bytes = (concat tmp%1#0 name#0) + return tmp%2#0 \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/Hello.ir/Hello.clear.0.ssa.ir b/tests/approvals/out/precompiled-apps/Hello.ir/Hello.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/precompiled-apps/Hello.ir/Hello.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/Hello.ssa.ir b/tests/approvals/out/precompiled-apps/Hello.ssa.ir deleted file mode 100644 index c9ebdd68..00000000 --- a/tests/approvals/out/precompiled-apps/Hello.ssa.ir +++ /dev/null @@ -1,107 +0,0 @@ -contract tests/approvals/precompiled-apps.algo.ts::Hello: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: - block@0: // L3 - (app_global_put "greeting" "") - return - - subroutine tests/approvals/precompiled-apps.algo.ts::Hello.__puya_arc4_router__() -> bool: - block@0: // L17 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // abi_routing_L17 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "create(string)void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} - block@2: // create_route_L18 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: bytes = ((extract 2 0) tmp%7#0) - tests/approvals/precompiled-apps.algo.ts::Hello.create(tmp%8#0) - return 1u - block@3: // delete_route_L6 - let tmp%9#0: uint64 = (txn OnCompletion) - let tmp%10#0: bool = (== tmp%9#0 DeleteApplication) - (assert tmp%10#0) // OnCompletion is not DeleteApplication - let tmp%11#0: uint64 = (txn ApplicationID) - let tmp%12#0: bool = (!= tmp%11#0 0u) - (assert tmp%12#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() - return 1u - block@4: // update_route_L9 - let tmp%13#0: uint64 = (txn OnCompletion) - let tmp%14#0: bool = (== tmp%13#0 UpdateApplication) - (assert tmp%14#0) // OnCompletion is not UpdateApplication - let tmp%15#0: uint64 = (txn ApplicationID) - let tmp%16#0: bool = (!= tmp%15#0 0u) - (assert tmp%16#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.update() - return 1u - block@5: // greet_route_L12 - let tmp%17#0: uint64 = (txn OnCompletion) - let tmp%18#0: bool = (== tmp%17#0 NoOp) - (assert tmp%18#0) // OnCompletion is not NoOp - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (!= tmp%19#0 0u) - (assert tmp%20#0) // can only call when not creating - let tmp%21#0: bytes = (txna ApplicationArgs 1) - let tmp%22#0: bytes = ((extract 2 0) tmp%21#0) - let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%22#0) - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%23#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%23#0) - return 1u - block@6: // switch_case_default_L17 - goto block@7 - block@7: // switch_case_next_L17 - goto block@9 - block@8: // bare_routing_L17 - goto block@9 - block@9: // after_if_else_L17 - return 0u - - subroutine tests/approvals/precompiled-apps.algo.ts::Hello.create(greeting: bytes) -> void: - block@0: // L18 - (app_global_put "greeting" greeting#0) - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: - block@0: // L6 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: - block@0: // L9 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: - block@0: // L12 - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bytes = (concat "" maybe_value%0#0) - let tmp%1#0: bytes = (concat tmp%0#0 " ") - let tmp%2#0: bytes = (concat tmp%1#0 name#0) - return tmp%2#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.approval.teal b/tests/approvals/out/precompiled-apps/HelloTemplate.approval.teal index bd1b4182..b0204e27 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplate.approval.teal +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.approval.teal @@ -1,115 +1,50 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::HelloTemplate.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "greeting" "" TMPL_GREETING txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - -// tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: -constructor: - // tests/approvals/precompiled-apps.algo.ts:25-28 - // constructor() { - // super() - // this.greeting.value = TemplateVar('GREETING') - // } - proto 0 0 - // tests/approvals/precompiled-apps.algo.ts:26 - // super() - callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - // tests/approvals/precompiled-apps.algo.ts:27 - // this.greeting.value = TemplateVar('GREETING') - bytec_2 // TMPL_GREETING - app_global_put - retsub - - -// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: -tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: - // tests/approvals/precompiled-apps.algo.ts:3 - // abstract class HelloBase extends Contract { - proto 0 0 - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - bytec_1 // "" - app_global_put - retsub - - -// tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/precompiled-apps.algo.ts:24 // export class HelloTemplate extends HelloBase { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@8 + bz main_bare_routing@11 + +main_abi_routing@4: + // tests/approvals/precompiled-apps.algo.ts:24 + // export class HelloTemplate extends HelloBase { txna ApplicationArgs 0 pushbytes 0x4c5c61ba // method "create()void" pushbytes 0x24378d3c // method "delete()void" pushbytes 0xa0e81872 // method "update()void" pushbytes 0xd0a28200 // method "greet(string)string" uncover 4 - match __puya_arc4_router___create_route@2 __puya_arc4_router___delete_route@3 __puya_arc4_router___update_route@4 __puya_arc4_router___greet_route@5 - b __puya_arc4_router___switch_case_default@6 + match main_create_route@5 main_delete_route@6 main_update_route@7 main_greet_route@8 -__puya_arc4_router___create_route@2: - // tests/approvals/precompiled-apps.algo.ts:30 - // @abimethod({ onCreate: 'require' }) - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - == - assert // can only call when creating - callsub create - intc_1 // 1 - retsub +main_switch_case_default@9: -__puya_arc4_router___delete_route@3: - // tests/approvals/precompiled-apps.algo.ts:6 - // @abimethod({ allowActions: 'DeleteApplication' }) - txn OnCompletion - pushint 5 // DeleteApplication - == - assert // OnCompletion is not DeleteApplication - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - callsub delete - intc_1 // 1 - retsub +main_switch_case_next@10: -__puya_arc4_router___update_route@4: - // tests/approvals/precompiled-apps.algo.ts:9 - // @abimethod({ allowActions: 'UpdateApplication' }) - txn OnCompletion - pushint 4 // UpdateApplication - == - assert // OnCompletion is not UpdateApplication - txn ApplicationID +main_after_if_else@12: + // tests/approvals/precompiled-apps.algo.ts:24 + // export class HelloTemplate extends HelloBase { intc_0 // 0 - != - assert // can only call when not creating - callsub update - intc_1 // 1 - retsub -__puya_arc4_router___greet_route@5: +main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__@13: + return + +main_greet_route@8: // tests/approvals/precompiled-apps.algo.ts:12 // greet(name: string): string { txn OnCompletion @@ -138,17 +73,88 @@ __puya_arc4_router___greet_route@5: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@6: - b __puya_arc4_router___after_if_else@9 +main_update_route@7: + // tests/approvals/precompiled-apps.algo.ts:9 + // @abimethod({ allowActions: 'UpdateApplication' }) + txn OnCompletion + pushint 4 // UpdateApplication + == + assert // OnCompletion is not UpdateApplication + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub update + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__@13 -__puya_arc4_router___bare_routing@8: +main_delete_route@6: + // tests/approvals/precompiled-apps.algo.ts:6 + // @abimethod({ allowActions: 'DeleteApplication' }) + txn OnCompletion + pushint 5 // DeleteApplication + == + assert // OnCompletion is not DeleteApplication + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub delete + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__@13 -__puya_arc4_router___after_if_else@9: - // tests/approvals/precompiled-apps.algo.ts:24 - // export class HelloTemplate extends HelloBase { +main_create_route@5: + // tests/approvals/precompiled-apps.algo.ts:30 + // @abimethod({ onCreate: 'require' }) + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID intc_0 // 0 + == + assert // can only call when creating + callsub create + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__@13 + +main_bare_routing@11: + b main_after_if_else@12 + + +// tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: +constructor: + // tests/approvals/precompiled-apps.algo.ts:25-28 + // constructor() { + // super() + // this.greeting.value = TemplateVar('GREETING') + // } + proto 0 0 + // tests/approvals/precompiled-apps.algo.ts:26 + // super() + callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + // tests/approvals/precompiled-apps.algo.ts:27 + // this.greeting.value = TemplateVar('GREETING') + bytec_2 // TMPL_GREETING + app_global_put + retsub + + +// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: + // tests/approvals/precompiled-apps.algo.ts:3 + // abstract class HelloBase extends Contract { + proto 0 0 + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + bytec_1 // "" + app_global_put retsub diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.arc32.json b/tests/approvals/out/precompiled-apps/HelloTemplate.arc32.json index cefc6382..39e99d6a 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplate.arc32.json +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.arc32.json @@ -22,8 +22,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgImdyZWV0aW5nIiAiIiBUTVBMX0dSRUVUSU5HCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjUtMjgKICAgIC8vIGNvbnN0cnVjdG9yKCkgewogICAgLy8gICBzdXBlcigpCiAgICAvLyAgIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICAvLyB9CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3VwZGF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvVGVtcGxhdGUgZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwLTMxCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI1LTI4CiAgICAvLyBjb25zdHJ1Y3RvcigpIHsKICAgIC8vICAgc3VwZXIoKQogICAgLy8gICB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnKQogICAgLy8gfQogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI2CiAgICAvLyBzdXBlcigpCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI3CiAgICAvLyB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0dSRUVUSU5HCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozCiAgICAvLyBhYnN0cmFjdCBjbGFzcyBIZWxsb0Jhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjYtNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gZGVsZXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gdXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzICIgIgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.arc56.json b/tests/approvals/out/precompiled-apps/HelloTemplate.arc56.json index 891e5eee..4e74bf61 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplate.arc56.json +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.arc56.json @@ -114,40 +114,40 @@ "sourceInfo": [ { "pc": [ - 101 + 119 ], "errorMessage": "OnCompletion is not DeleteApplication" }, { "pc": [ - 85, - 132 + 60, + 136 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 117 + 101 ], "errorMessage": "OnCompletion is not UpdateApplication" }, { "pc": [ - 90 + 141 ], "errorMessage": "can only call when creating" }, { "pc": [ + 65, 106, - 122, - 137 + 124 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 189 + 187 ], "errorMessage": "check GlobalState exists" } @@ -160,8 +160,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgImdyZWV0aW5nIiAiIiBUTVBMX0dSRUVUSU5HCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjUtMjgKICAgIC8vIGNvbnN0cnVjdG9yKCkgewogICAgLy8gICBzdXBlcigpCiAgICAvLyAgIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICAvLyB9CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycpCiAgICBieXRlY18yIC8vIFRNUExfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3VwZGF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoyNAogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvVGVtcGxhdGUgZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwLTMxCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgVE1QTF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlIGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZSBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI1LTI4CiAgICAvLyBjb25zdHJ1Y3RvcigpIHsKICAgIC8vICAgc3VwZXIoKQogICAgLy8gICB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnKQogICAgLy8gfQogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI2CiAgICAvLyBzdXBlcigpCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjI3CiAgICAvLyB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0dSRUVUSU5HCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozCiAgICAvLyBhYnN0cmFjdCBjbGFzcyBIZWxsb0Jhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGUuY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozMC0zMQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjYtNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gZGVsZXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gdXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzICIgIgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAJAxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABqSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIAEMjQv/FMRmBBRJEMRgiE0SIAC0jQv+zMRkiEkQxGCISRIgAGCNC/6JC/56KAACIAAQoKmeJigAAKClniYoAAImKAACJigAAiYoBASIoZUQpTFCAASBQi/9QiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": { diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.clear.teal b/tests/approvals/out/precompiled-apps/HelloTemplate.clear.teal index 13971dea..a4d58047 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplate.clear.teal +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::HelloTemplate.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir new file mode 100644 index 00000000..6d35dc4a --- /dev/null +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.approval.0.ssa.ir @@ -0,0 +1,103 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: + block@0: // L25 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: + block@0: // L3 + (app_global_put "greeting" "") + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__() -> bool: + block@0: // L24 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L24 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "create()void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} + block@2: // create_route_L30 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() + return 1u + block@3: // delete_route_L6 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 DeleteApplication) + (assert tmp%8#0) // OnCompletion is not DeleteApplication + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() + return 1u + block@4: // update_route_L9 + let tmp%11#0: uint64 = (txn OnCompletion) + let tmp%12#0: bool = (== tmp%11#0 UpdateApplication) + (assert tmp%12#0) // OnCompletion is not UpdateApplication + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (!= tmp%13#0 0u) + (assert tmp%14#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.update() + return 1u + block@5: // greet_route_L12 + let tmp%15#0: uint64 = (txn OnCompletion) + let tmp%16#0: bool = (== tmp%15#0 NoOp) + (assert tmp%16#0) // OnCompletion is not NoOp + let tmp%17#0: uint64 = (txn ApplicationID) + let tmp%18#0: bool = (!= tmp%17#0 0u) + (assert tmp%18#0) // can only call when not creating + let tmp%19#0: bytes = (txna ApplicationArgs 1) + let tmp%20#0: bytes = ((extract 2 0) tmp%19#0) + let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%20#0) + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%21#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%21#0) + return 1u + block@6: // switch_case_default_L24 + goto block@7 + block@7: // switch_case_next_L24 + goto block@9 + block@8: // bare_routing_L24 + goto block@9 + block@9: // after_if_else_L24 + return 0u + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> void: + block@0: // L30 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: + block@0: // L6 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: + block@0: // L9 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: + block@0: // L12 + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bytes = (concat "" maybe_value%0#0) + let tmp%1#0: bytes = (concat tmp%0#0 " ") + let tmp%2#0: bytes = (concat tmp%1#0 name#0) + return tmp%2#0 \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.clear.0.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/precompiled-apps/HelloTemplate.ir/HelloTemplate.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplate.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplate.ssa.ir deleted file mode 100644 index e7d9b922..00000000 --- a/tests/approvals/out/precompiled-apps/HelloTemplate.ssa.ir +++ /dev/null @@ -1,110 +0,0 @@ -contract tests/approvals/precompiled-apps.algo.ts::HelloTemplate: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.constructor() -> void: - block@0: // L25 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](TMPL_GREETING)) - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: - block@0: // L3 - (app_global_put "greeting" "") - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.__puya_arc4_router__() -> bool: - block@0: // L24 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // abi_routing_L24 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "create()void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} - block@2: // create_route_L30 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() - return 1u - block@3: // delete_route_L6 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 DeleteApplication) - (assert tmp%8#0) // OnCompletion is not DeleteApplication - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (!= tmp%9#0 0u) - (assert tmp%10#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() - return 1u - block@4: // update_route_L9 - let tmp%11#0: uint64 = (txn OnCompletion) - let tmp%12#0: bool = (== tmp%11#0 UpdateApplication) - (assert tmp%12#0) // OnCompletion is not UpdateApplication - let tmp%13#0: uint64 = (txn ApplicationID) - let tmp%14#0: bool = (!= tmp%13#0 0u) - (assert tmp%14#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.update() - return 1u - block@5: // greet_route_L12 - let tmp%15#0: uint64 = (txn OnCompletion) - let tmp%16#0: bool = (== tmp%15#0 NoOp) - (assert tmp%16#0) // OnCompletion is not NoOp - let tmp%17#0: uint64 = (txn ApplicationID) - let tmp%18#0: bool = (!= tmp%17#0 0u) - (assert tmp%18#0) // can only call when not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - let tmp%20#0: bytes = ((extract 2 0) tmp%19#0) - let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%20#0) - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%21#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%21#0) - return 1u - block@6: // switch_case_default_L24 - goto block@7 - block@7: // switch_case_next_L24 - goto block@9 - block@8: // bare_routing_L24 - goto block@9 - block@9: // after_if_else_L24 - return 0u - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplate.create() -> void: - block@0: // L30 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: - block@0: // L6 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: - block@0: // L9 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: - block@0: // L12 - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bytes = (concat "" maybe_value%0#0) - let tmp%1#0: bytes = (concat tmp%0#0 " ") - let tmp%2#0: bytes = (concat tmp%1#0 name#0) - return tmp%2#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.approval.teal b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.approval.teal index 86914a38..7c65d0e8 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.approval.teal +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.approval.teal @@ -1,115 +1,50 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "greeting" "" PRFX_GREETING txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - -// tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: -constructor: - // tests/approvals/precompiled-apps.algo.ts:35-38 - // constructor() { - // super() - // this.greeting.value = TemplateVar('GREETING', 'PRFX_') - // } - proto 0 0 - // tests/approvals/precompiled-apps.algo.ts:36 - // super() - callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - // tests/approvals/precompiled-apps.algo.ts:37 - // this.greeting.value = TemplateVar('GREETING', 'PRFX_') - bytec_2 // PRFX_GREETING - app_global_put - retsub - - -// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: -tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: - // tests/approvals/precompiled-apps.algo.ts:3 - // abstract class HelloBase extends Contract { - proto 0 0 - // tests/approvals/precompiled-apps.algo.ts:4 - // greeting = GlobalState({ initialValue: '' }) - bytec_0 // "greeting" - bytec_1 // "" - app_global_put - retsub - - -// tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/precompiled-apps.algo.ts:34 // export class HelloTemplateCustomPrefix extends HelloBase { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@8 + bz main_bare_routing@11 + +main_abi_routing@4: + // tests/approvals/precompiled-apps.algo.ts:34 + // export class HelloTemplateCustomPrefix extends HelloBase { txna ApplicationArgs 0 pushbytes 0x4c5c61ba // method "create()void" pushbytes 0x24378d3c // method "delete()void" pushbytes 0xa0e81872 // method "update()void" pushbytes 0xd0a28200 // method "greet(string)string" uncover 4 - match __puya_arc4_router___create_route@2 __puya_arc4_router___delete_route@3 __puya_arc4_router___update_route@4 __puya_arc4_router___greet_route@5 - b __puya_arc4_router___switch_case_default@6 + match main_create_route@5 main_delete_route@6 main_update_route@7 main_greet_route@8 -__puya_arc4_router___create_route@2: - // tests/approvals/precompiled-apps.algo.ts:40 - // @abimethod({ onCreate: 'require' }) - txn OnCompletion - intc_0 // NoOp - == - assert // OnCompletion is not NoOp - txn ApplicationID - intc_0 // 0 - == - assert // can only call when creating - callsub create - intc_1 // 1 - retsub +main_switch_case_default@9: -__puya_arc4_router___delete_route@3: - // tests/approvals/precompiled-apps.algo.ts:6 - // @abimethod({ allowActions: 'DeleteApplication' }) - txn OnCompletion - pushint 5 // DeleteApplication - == - assert // OnCompletion is not DeleteApplication - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - callsub delete - intc_1 // 1 - retsub +main_switch_case_next@10: -__puya_arc4_router___update_route@4: - // tests/approvals/precompiled-apps.algo.ts:9 - // @abimethod({ allowActions: 'UpdateApplication' }) - txn OnCompletion - pushint 4 // UpdateApplication - == - assert // OnCompletion is not UpdateApplication - txn ApplicationID +main_after_if_else@12: + // tests/approvals/precompiled-apps.algo.ts:34 + // export class HelloTemplateCustomPrefix extends HelloBase { intc_0 // 0 - != - assert // can only call when not creating - callsub update - intc_1 // 1 - retsub -__puya_arc4_router___greet_route@5: +main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__@13: + return + +main_greet_route@8: // tests/approvals/precompiled-apps.algo.ts:12 // greet(name: string): string { txn OnCompletion @@ -138,17 +73,88 @@ __puya_arc4_router___greet_route@5: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@6: - b __puya_arc4_router___after_if_else@9 +main_update_route@7: + // tests/approvals/precompiled-apps.algo.ts:9 + // @abimethod({ allowActions: 'UpdateApplication' }) + txn OnCompletion + pushint 4 // UpdateApplication + == + assert // OnCompletion is not UpdateApplication + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub update + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__@13 -__puya_arc4_router___bare_routing@8: +main_delete_route@6: + // tests/approvals/precompiled-apps.algo.ts:6 + // @abimethod({ allowActions: 'DeleteApplication' }) + txn OnCompletion + pushint 5 // DeleteApplication + == + assert // OnCompletion is not DeleteApplication + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub delete + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__@13 -__puya_arc4_router___after_if_else@9: - // tests/approvals/precompiled-apps.algo.ts:34 - // export class HelloTemplateCustomPrefix extends HelloBase { +main_create_route@5: + // tests/approvals/precompiled-apps.algo.ts:40 + // @abimethod({ onCreate: 'require' }) + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID intc_0 // 0 + == + assert // can only call when creating + callsub create + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__@13 + +main_bare_routing@11: + b main_after_if_else@12 + + +// tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: +constructor: + // tests/approvals/precompiled-apps.algo.ts:35-38 + // constructor() { + // super() + // this.greeting.value = TemplateVar('GREETING', 'PRFX_') + // } + proto 0 0 + // tests/approvals/precompiled-apps.algo.ts:36 + // super() + callsub tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + // tests/approvals/precompiled-apps.algo.ts:37 + // this.greeting.value = TemplateVar('GREETING', 'PRFX_') + bytec_2 // PRFX_GREETING + app_global_put + retsub + + +// tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: +tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor: + // tests/approvals/precompiled-apps.algo.ts:3 + // abstract class HelloBase extends Contract { + proto 0 0 + // tests/approvals/precompiled-apps.algo.ts:4 + // greeting = GlobalState({ initialValue: '' }) + bytec_0 // "greeting" + bytec_1 // "" + app_global_put retsub diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc32.json b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc32.json index 33927c0f..1996df3c 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc32.json +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc32.json @@ -22,8 +22,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgImdyZWV0aW5nIiAiIiBQUkZYX0dSRUVUSU5HCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzUtMzgKICAgIC8vIGNvbnN0cnVjdG9yKCkgewogICAgLy8gICBzdXBlcigpCiAgICAvLyAgIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICAvLyB9CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3VwZGF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozNAogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXggZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwLTQxCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM1LTM4CiAgICAvLyBjb25zdHJ1Y3RvcigpIHsKICAgIC8vICAgc3VwZXIoKQogICAgLy8gICB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnLCAnUFJGWF8nKQogICAgLy8gfQogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM2CiAgICAvLyBzdXBlcigpCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnLCAnUFJGWF8nKQogICAgYnl0ZWNfMiAvLyBQUkZYX0dSRUVUSU5HCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozCiAgICAvLyBhYnN0cmFjdCBjbGFzcyBIZWxsb0Jhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0MC00MQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjYtNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gZGVsZXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gdXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzICIgIgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc56.json b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc56.json index f5bcf0a4..e9e4e30c 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc56.json +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.arc56.json @@ -114,40 +114,40 @@ "sourceInfo": [ { "pc": [ - 101 + 119 ], "errorMessage": "OnCompletion is not DeleteApplication" }, { "pc": [ - 85, - 132 + 60, + 136 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 117 + 101 ], "errorMessage": "OnCompletion is not UpdateApplication" }, { "pc": [ - 90 + 141 ], "errorMessage": "can only call when creating" }, { "pc": [ + 65, 106, - 122, - 137 + 124 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 189 + 187 ], "errorMessage": "check GlobalState exists" } @@ -160,8 +160,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgImdyZWV0aW5nIiAiIiBQUkZYX0dSRUVUSU5HCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzUtMzgKICAgIC8vIGNvbnN0cnVjdG9yKCkgewogICAgLy8gICBzdXBlcigpCiAgICAvLyAgIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICAvLyB9CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzYKICAgIC8vIHN1cGVyKCkKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzcKICAgIC8vIHRoaXMuZ3JlZXRpbmcudmFsdWUgPSBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdHUkVFVElORycsICdQUkZYXycpCiAgICBieXRlY18yIC8vIFBSRlhfR1JFRVRJTkcKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3IoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjMKICAgIC8vIGFic3RyYWN0IGNsYXNzIEhlbGxvQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICBieXRlY18xIC8vICIiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2NyZWF0ZV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlbGV0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3VwZGF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19jcmVhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgY3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdXBkYXRlX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjkKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdVcGRhdGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IFVwZGF0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB1cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dyZWV0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozNAogICAgLy8gZXhwb3J0IGNsYXNzIEhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXggZXh0ZW5kcyBIZWxsb0Jhc2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGdyZWV0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5jcmVhdGUoKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwLTQxCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgLy8gY3JlYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6Ni03CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UudXBkYXRlKCkgLT4gdm9pZDoKdXBkYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5LTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyB1cGRhdGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb0Jhc2UuZ3JlZXQobmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpncmVldDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMwogICAgLy8gcmV0dXJuIGAke3RoaXMuZ3JlZXRpbmcudmFsdWV9ICR7bmFtZX1gCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYnl0ZWNfMSAvLyAiIgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJncmVldGluZyIgIiIgUFJGWF9HUkVFVElORwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgoKbWFpbl9pZl9ib2R5QDE6CiAgICBjYWxsc3ViIGNvbnN0cnVjdG9yCgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKCm1haW5fYmxvY2tAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBjbGFzcyBIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4IGV4dGVuZHMgSGVsbG9CYXNlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YTBlODE4NzIgLy8gbWV0aG9kICJ1cGRhdGUoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhkMGEyODIwMCAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDQKICAgIG1hdGNoIG1haW5fY3JlYXRlX3JvdXRlQDUgbWFpbl9kZWxldGVfcm91dGVANiBtYWluX3VwZGF0ZV9yb3V0ZUA3IG1haW5fZ3JlZXRfcm91dGVAOAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDk6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTA6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ3JlZXRfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTIKICAgIC8vIGdyZWV0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM0CiAgICAvLyBleHBvcnQgY2xhc3MgSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCBleHRlbmRzIEhlbGxvQmFzZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czoxMgogICAgLy8gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICAgIGNhbGxzdWIgZ3JlZXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX3VwZGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnVXBkYXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBVcGRhdGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9kZWxldGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgRGVsZXRlQXBwbGljYXRpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbGV0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpIZWxsb1RlbXBsYXRlQ3VzdG9tUHJlZml4LmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM1LTM4CiAgICAvLyBjb25zdHJ1Y3RvcigpIHsKICAgIC8vICAgc3VwZXIoKQogICAgLy8gICB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnLCAnUFJGWF8nKQogICAgLy8gfQogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM2CiAgICAvLyBzdXBlcigpCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5jb25zdHJ1Y3RvcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0CiAgICAvLyBncmVldGluZyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnJyB9KQogICAgYnl0ZWNfMCAvLyAiZ3JlZXRpbmciCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLmdyZWV0aW5nLnZhbHVlID0gVGVtcGxhdGVWYXI8c3RyaW5nPignR1JFRVRJTkcnLCAnUFJGWF8nKQogICAgYnl0ZWNfMiAvLyBQUkZYX0dSRUVUSU5HCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czozCiAgICAvLyBhYnN0cmFjdCBjbGFzcyBIZWxsb0Jhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NAogICAgLy8gZ3JlZXRpbmcgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogJycgfSkKICAgIGJ5dGVjXzAgLy8gImdyZWV0aW5nIgogICAgYnl0ZWNfMSAvLyAiIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXguY3JlYXRlKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0MC00MQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIC8vIGNyZWF0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkhlbGxvQmFzZS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjYtNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gZGVsZXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OS0xMAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ1VwZGF0ZUFwcGxpY2F0aW9uJyB9KQogICAgLy8gdXBkYXRlKCkge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6SGVsbG9CYXNlLmdyZWV0KG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ3JlZXQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEyCiAgICAvLyBncmVldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYCR7dGhpcy5ncmVldGluZy52YWx1ZX0gJHtuYW1lfWAKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQKICAgIC8vIGdyZWV0aW5nID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICcnIH0pCiAgICBieXRlY18wIC8vICJncmVldGluZyIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6MTMKICAgIC8vIHJldHVybiBgJHt0aGlzLmdyZWV0aW5nLnZhbHVlfSAke25hbWV9YAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzICIgIgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAwhncmVldGluZwAAMRhAAAOIAJAxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABqSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIAEMjQv/FMRmBBRJEMRgiE0SIAC0jQv+zMRkiEkQxGCISRIgAGCNC/6JC/56KAACIAAQoKmeJigAAKClniYoAAImKAACJigAAiYoBASIoZUQpTFCAASBQi/9QiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": { diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.clear.teal b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.clear.teal index 345b124b..a4d58047 100644 --- a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.clear.teal +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir new file mode 100644 index 00000000..a40318e0 --- /dev/null +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.approval.0.ssa.ir @@ -0,0 +1,103 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: + block@0: // L35 + tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() + (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: + block@0: // L3 + (app_global_put "greeting" "") + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__() -> bool: + block@0: // L34 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L34 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "create()void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} + block@2: // create_route_L40 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (== tmp%5#0 0u) + (assert tmp%6#0) // can only call when creating + tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.create() + return 1u + block@3: // delete_route_L6 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 DeleteApplication) + (assert tmp%8#0) // OnCompletion is not DeleteApplication + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() + return 1u + block@4: // update_route_L9 + let tmp%11#0: uint64 = (txn OnCompletion) + let tmp%12#0: bool = (== tmp%11#0 UpdateApplication) + (assert tmp%12#0) // OnCompletion is not UpdateApplication + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (!= tmp%13#0 0u) + (assert tmp%14#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::HelloBase.update() + return 1u + block@5: // greet_route_L12 + let tmp%15#0: uint64 = (txn OnCompletion) + let tmp%16#0: bool = (== tmp%15#0 NoOp) + (assert tmp%16#0) // OnCompletion is not NoOp + let tmp%17#0: uint64 = (txn ApplicationID) + let tmp%18#0: bool = (!= tmp%17#0 0u) + (assert tmp%18#0) // can only call when not creating + let tmp%19#0: bytes = (txna ApplicationArgs 1) + let tmp%20#0: bytes = ((extract 2 0) tmp%19#0) + let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%20#0) + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%21#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%21#0) + return 1u + block@6: // switch_case_default_L34 + goto block@7 + block@7: // switch_case_next_L34 + goto block@9 + block@8: // bare_routing_L34 + goto block@9 + block@9: // after_if_else_L34 + return 0u + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.create() -> void: + block@0: // L40 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: + block@0: // L6 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: + block@0: // L9 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: + block@0: // L12 + let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bytes = (concat "" maybe_value%0#0) + let tmp%1#0: bytes = (concat tmp%0#0 " ") + let tmp%2#0: bytes = (concat tmp%1#0 name#0) + return tmp%2#0 \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.clear.0.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ir/HelloTemplateCustomPrefix.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ssa.ir b/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ssa.ir deleted file mode 100644 index 720f9017..00000000 --- a/tests/approvals/out/precompiled-apps/HelloTemplateCustomPrefix.ssa.ir +++ /dev/null @@ -1,110 +0,0 @@ -contract tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.constructor() -> void: - block@0: // L35 - tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() - (app_global_put "greeting" TemplateVar[bytes](PRFX_GREETING)) - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.constructor() -> void: - block@0: // L3 - (app_global_put "greeting" "") - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.__puya_arc4_router__() -> bool: - block@0: // L34 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // abi_routing_L34 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "create()void" => block@2, method "delete()void" => block@3, method "update()void" => block@4, method "greet(string)string" => block@5, * => block@6} - block@2: // create_route_L40 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (== tmp%5#0 0u) - (assert tmp%6#0) // can only call when creating - tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.create() - return 1u - block@3: // delete_route_L6 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 DeleteApplication) - (assert tmp%8#0) // OnCompletion is not DeleteApplication - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (!= tmp%9#0 0u) - (assert tmp%10#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() - return 1u - block@4: // update_route_L9 - let tmp%11#0: uint64 = (txn OnCompletion) - let tmp%12#0: bool = (== tmp%11#0 UpdateApplication) - (assert tmp%12#0) // OnCompletion is not UpdateApplication - let tmp%13#0: uint64 = (txn ApplicationID) - let tmp%14#0: bool = (!= tmp%13#0 0u) - (assert tmp%14#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::HelloBase.update() - return 1u - block@5: // greet_route_L12 - let tmp%15#0: uint64 = (txn OnCompletion) - let tmp%16#0: bool = (== tmp%15#0 NoOp) - (assert tmp%16#0) // OnCompletion is not NoOp - let tmp%17#0: uint64 = (txn ApplicationID) - let tmp%18#0: bool = (!= tmp%17#0 0u) - (assert tmp%18#0) // can only call when not creating - let tmp%19#0: bytes = (txna ApplicationArgs 1) - let tmp%20#0: bytes = ((extract 2 0) tmp%19#0) - let to_encode%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(tmp%20#0) - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%21#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%21#0) - return 1u - block@6: // switch_case_default_L34 - goto block@7 - block@7: // switch_case_next_L34 - goto block@9 - block@8: // bare_routing_L34 - goto block@9 - block@9: // after_if_else_L34 - return 0u - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix.create() -> void: - block@0: // L40 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.delete() -> void: - block@0: // L6 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.update() -> void: - block@0: // L9 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::HelloBase.greet(name: bytes) -> bytes: - block@0: // L12 - let (maybe_value%0#0: bytes, maybe_exists%0#0: bool) = (app_global_get_ex 0u "greeting") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bytes = (concat "" maybe_value%0#0) - let tmp%1#0: bytes = (concat tmp%0#0 " ") - let tmp%2#0: bytes = (concat tmp%1#0 name#0) - return tmp%2#0 - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.approval.teal b/tests/approvals/out/precompiled-apps/LargeProgram.approval.teal index 7e033c76..6583b5dd 100644 --- a/tests/approvals/out/precompiled-apps/LargeProgram.approval.teal +++ b/tests/approvals/out/precompiled-apps/LargeProgram.approval.teal @@ -1,28 +1,55 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::LargeProgram.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 - callsub __puya_arc4_router__ - return - -// tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/precompiled-apps.algo.ts:48 // export class LargeProgram extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/precompiled-apps.algo.ts:48 + // export class LargeProgram extends Contract { txna ApplicationArgs 0 pushbytes 0x02bf30cf // method "getBigBytesLength()uint64" pushbytes 0x24378d3c // method "delete()void" uncover 2 - match __puya_arc4_router___getBigBytesLength_route@2 __puya_arc4_router___delete_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_getBigBytesLength_route@3 main_delete_route@4 + +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/precompiled-apps.algo.ts:48 + // export class LargeProgram extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__@12: + return + +main_delete_route@4: + // tests/approvals/precompiled-apps.algo.ts:53 + // @abimethod({ allowActions: 'DeleteApplication' }) + txn OnCompletion + pushint 5 // DeleteApplication + == + assert // OnCompletion is not DeleteApplication + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub delete + intc_1 // 1 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__@12 -__puya_arc4_router___getBigBytesLength_route@2: +main_getBigBytesLength_route@3: // tests/approvals/precompiled-apps.algo.ts:49 // getBigBytesLength() { txn OnCompletion @@ -40,36 +67,22 @@ __puya_arc4_router___getBigBytesLength_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___delete_route@3: - // tests/approvals/precompiled-apps.algo.ts:53 - // @abimethod({ allowActions: 'DeleteApplication' }) - txn OnCompletion - pushint 5 // DeleteApplication - == - assert // OnCompletion is not DeleteApplication - txn ApplicationID - intc_0 // 0 - != - assert // can only call when not creating - callsub delete - intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/precompiled-apps.algo.ts:48 // export class LargeProgram extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/precompiled-apps.algo.ts:48 // export class LargeProgram extends Contract { txn ApplicationID @@ -78,15 +91,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/precompiled-apps.algo.ts:48 - // export class LargeProgram extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__@12 // tests/approvals/precompiled-apps.algo.ts::LargeProgram.getBigBytesLength() -> uint64: diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.arc32.json b/tests/approvals/out/precompiled-apps/LargeProgram.arc32.json index 530a3534..e7b19285 100644 --- a/tests/approvals/out/precompiled-apps/LargeProgram.arc32.json +++ b/tests/approvals/out/precompiled-apps/LargeProgram.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDgKICAgIC8vIGV4cG9ydCBjbGFzcyBMYXJnZVByb2dyYW0gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMmJmMzBjZiAvLyBtZXRob2QgImdldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0QmlnQnl0ZXNMZW5ndGhfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEJpZ0J5dGVzTGVuZ3RoX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ5CiAgICAvLyBnZXRCaWdCeXRlc0xlbmd0aCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QmlnQnl0ZXNMZW5ndGgKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVsZXRlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUzCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uZ2V0QmlnQnl0ZXNMZW5ndGgoKSAtPiB1aW50NjQ6CmdldEJpZ0J5dGVzTGVuZ3RoOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OQogICAgLy8gZ2V0QmlnQnl0ZXNMZW5ndGgoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTAKICAgIC8vIHJldHVybiBnZXRCaWdCeXRlcygpLmxlbmd0aAogICAgY2FsbHN1YiBnZXRCaWdCeXRlcwogICAgbGVuCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpnZXRCaWdCeXRlcygpIC0+IGJ5dGVzOgpnZXRCaWdCeXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDQKICAgIC8vIGZ1bmN0aW9uIGdldEJpZ0J5dGVzKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ1CiAgICAvLyByZXR1cm4gb3AuYnplcm8oNDA5NikKICAgIHB1c2hpbnQgNDA5NiAvLyA0MDk2CiAgICBiemVybwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTMtNTQKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIGRlbGV0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ4CiAgICAvLyBleHBvcnQgY2xhc3MgTGFyZ2VQcm9ncmFtIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ4CiAgICAvLyBleHBvcnQgY2xhc3MgTGFyZ2VQcm9ncmFtIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldEJpZ0J5dGVzTGVuZ3RoX3JvdXRlQDMgbWFpbl9kZWxldGVfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDgKICAgIC8vIGV4cG9ydCBjbGFzcyBMYXJnZVByb2dyYW0gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9kZWxldGVfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTMKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IERlbGV0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBkZWxldGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZ2V0QmlnQnl0ZXNMZW5ndGhfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDkKICAgIC8vIGdldEJpZ0J5dGVzTGVuZ3RoKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRCaWdCeXRlc0xlbmd0aAogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLmdldEJpZ0J5dGVzTGVuZ3RoKCkgLT4gdWludDY0OgpnZXRCaWdCeXRlc0xlbmd0aDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDkKICAgIC8vIGdldEJpZ0J5dGVzTGVuZ3RoKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gZ2V0QmlnQnl0ZXMoKS5sZW5ndGgKICAgIGNhbGxzdWIgZ2V0QmlnQnl0ZXMKICAgIGxlbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6Z2V0QmlnQnl0ZXMoKSAtPiBieXRlczoKZ2V0QmlnQnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ0CiAgICAvLyBmdW5jdGlvbiBnZXRCaWdCeXRlcygpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0NQogICAgLy8gcmV0dXJuIG9wLmJ6ZXJvKDQwOTYpCiAgICBwdXNoaW50IDQwOTYgLy8gNDA5NgogICAgYnplcm8KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUzLTU0CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.arc56.json b/tests/approvals/out/precompiled-apps/LargeProgram.arc56.json index d1b3571e..06f5a181 100644 --- a/tests/approvals/out/precompiled-apps/LargeProgram.arc56.json +++ b/tests/approvals/out/precompiled-apps/LargeProgram.arc56.json @@ -73,26 +73,26 @@ "sourceInfo": [ { "pc": [ - 75 + 42 ], "errorMessage": "OnCompletion is not DeleteApplication" }, { "pc": [ - 49 + 59 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 104 + 97 ], "errorMessage": "can only call when creating" }, { "pc": [ - 54, - 80 + 47, + 64 ], "errorMessage": "can only call when not creating" } @@ -105,8 +105,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDgKICAgIC8vIGV4cG9ydCBjbGFzcyBMYXJnZVByb2dyYW0gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMmJmMzBjZiAvLyBtZXRob2QgImdldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIHVuY292ZXIgMgogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fZ2V0QmlnQnl0ZXNMZW5ndGhfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZWxldGVfcm91dGVAMwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2dldEJpZ0J5dGVzTGVuZ3RoX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ5CiAgICAvLyBnZXRCaWdCeXRlc0xlbmd0aCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QmlnQnl0ZXNMZW5ndGgKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVsZXRlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUzCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBEZWxldGVBcHBsaWNhdGlvbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDQ6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTAKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANwogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDgKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDg6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uZ2V0QmlnQnl0ZXNMZW5ndGgoKSAtPiB1aW50NjQ6CmdldEJpZ0J5dGVzTGVuZ3RoOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OQogICAgLy8gZ2V0QmlnQnl0ZXNMZW5ndGgoKSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTAKICAgIC8vIHJldHVybiBnZXRCaWdCeXRlcygpLmxlbmd0aAogICAgY2FsbHN1YiBnZXRCaWdCeXRlcwogICAgbGVuCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpnZXRCaWdCeXRlcygpIC0+IGJ5dGVzOgpnZXRCaWdCeXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDQKICAgIC8vIGZ1bmN0aW9uIGdldEJpZ0J5dGVzKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ1CiAgICAvLyByZXR1cm4gb3AuYnplcm8oNDA5NikKICAgIHB1c2hpbnQgNDA5NiAvLyA0MDk2CiAgICBiemVybwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLmRlbGV0ZSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTMtNTQKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIC8vIGRlbGV0ZSgpIHt9CiAgICBwcm90byAwIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ4CiAgICAvLyBleHBvcnQgY2xhc3MgTGFyZ2VQcm9ncmFtIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ4CiAgICAvLyBleHBvcnQgY2xhc3MgTGFyZ2VQcm9ncmFtIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDAyYmYzMGNmIC8vIG1ldGhvZCAiZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCIKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2dldEJpZ0J5dGVzTGVuZ3RoX3JvdXRlQDMgbWFpbl9kZWxldGVfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDU6CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDgKICAgIC8vIGV4cG9ydCBjbGFzcyBMYXJnZVByb2dyYW0gZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAoKbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9kZWxldGVfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NTMKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdEZWxldGVBcHBsaWNhdGlvbicgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IERlbGV0ZUFwcGxpY2F0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBkZWxldGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCm1haW5fZ2V0QmlnQnl0ZXNMZW5ndGhfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDkKICAgIC8vIGdldEJpZ0J5dGVzTGVuZ3RoKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRCaWdCeXRlc0xlbmd0aAogICAgaXRvYgogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6TGFyZ2VQcm9ncmFtLmdldEJpZ0J5dGVzTGVuZ3RoKCkgLT4gdWludDY0OgpnZXRCaWdCeXRlc0xlbmd0aDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6NDkKICAgIC8vIGdldEJpZ0J5dGVzTGVuZ3RoKCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gZ2V0QmlnQnl0ZXMoKS5sZW5ndGgKICAgIGNhbGxzdWIgZ2V0QmlnQnl0ZXMKICAgIGxlbgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo6Z2V0QmlnQnl0ZXMoKSAtPiBieXRlczoKZ2V0QmlnQnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjQ0CiAgICAvLyBmdW5jdGlvbiBnZXRCaWdCeXRlcygpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0NQogICAgLy8gcmV0dXJuIG9wLmJ6ZXJvKDQwOTYpCiAgICBwdXNoaW50IDQwOTYgLy8gNDA5NgogICAgYnplcm8KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1hcHBzLmFsZ28udHM6OkxhcmdlUHJvZ3JhbS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjUzLTU0CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICAvLyBkZWxldGUoKSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtYXBwcy5hbGdvLnRzOjpMYXJnZVByb2dyYW0uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWFwcHMuYWxnby50czo0OAogICAgLy8gZXhwb3J0IGNsYXNzIExhcmdlUHJvZ3JhbSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAExGyITQQBGNhoAgAQCvzDPgAQkN408TwKOAgAUAAIiQzEZgQUSRDEYIhNEiABGI0L/7TEZIhJEMRgiE0SIACUWgAQVH3x1TFCwI0L/0jEZIkyOAQADQv/GMRgiEkSIABgjQv+7igABiAACFYmKAAGBgCCviYoAAImKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.clear.teal b/tests/approvals/out/precompiled-apps/LargeProgram.clear.teal index 7b795785..a4d58047 100644 --- a/tests/approvals/out/precompiled-apps/LargeProgram.clear.teal +++ b/tests/approvals/out/precompiled-apps/LargeProgram.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::LargeProgram.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.approval.0.ssa.ir b/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.approval.0.ssa.ir new file mode 100644 index 00000000..9fd3a907 --- /dev/null +++ b/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.approval.0.ssa.ir @@ -0,0 +1,72 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__() -> bool: + block@0: // L48 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L48 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "getBigBytesLength()uint64" => block@2, method "delete()void" => block@3, * => block@4} + block@2: // getBigBytesLength_route_L49 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: uint64 = tests/approvals/precompiled-apps.algo.ts::LargeProgram.getBigBytesLength() + let val_as_bytes%0#0: bytes = (itob to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) + (log tmp%7#0) + return 1u + block@3: // delete_route_L53 + let tmp%8#0: uint64 = (txn OnCompletion) + let tmp%9#0: bool = (== tmp%8#0 DeleteApplication) + (assert tmp%9#0) // OnCompletion is not DeleteApplication + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (!= tmp%10#0 0u) + (assert tmp%11#0) // can only call when not creating + tests/approvals/precompiled-apps.algo.ts::LargeProgram.delete() + return 1u + block@4: // switch_case_default_L48 + goto block@5 + block@5: // switch_case_next_L48 + goto block@10 + block@6: // bare_routing_L48 + let tmp%12#0: uint64 = (txn OnCompletion) + switch tmp%12#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L48 + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (== tmp%13#0 0u) + (assert tmp%14#0) // can only call when creating + tests/approvals/precompiled-apps.algo.ts::LargeProgram.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L48 + goto block@9 + block@9: // switch_case_next_L48 + goto block@10 + block@10: // after_if_else_L48 + return 0u + +subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.getBigBytesLength() -> uint64: + block@0: // L49 + let tmp%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::getBigBytes() + let tmp%1#0: uint64 = (len tmp%0#0) + return tmp%1#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::getBigBytes() -> bytes: + block@0: // L44 + let tmp%0#0: bytes = (bzero 4096u) + return tmp%0#0 + +subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.delete() -> void: + block@0: // L53 + return + +subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.__algots__.defaultCreate() -> void: + block@0: // L48 + return \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.clear.0.ssa.ir b/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/precompiled-apps/LargeProgram.ir/LargeProgram.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/LargeProgram.ssa.ir b/tests/approvals/out/precompiled-apps/LargeProgram.ssa.ir deleted file mode 100644 index bd9d05bd..00000000 --- a/tests/approvals/out/precompiled-apps/LargeProgram.ssa.ir +++ /dev/null @@ -1,79 +0,0 @@ -contract tests/approvals/precompiled-apps.algo.ts::LargeProgram: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.__puya_arc4_router__() -> bool: - block@0: // L48 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L48 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getBigBytesLength()uint64" => block@2, method "delete()void" => block@3, * => block@4} - block@2: // getBigBytesLength_route_L49 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: uint64 = tests/approvals/precompiled-apps.algo.ts::LargeProgram.getBigBytesLength() - let val_as_bytes%0#0: bytes = (itob to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) - (log tmp%7#0) - return 1u - block@3: // delete_route_L53 - let tmp%8#0: uint64 = (txn OnCompletion) - let tmp%9#0: bool = (== tmp%8#0 DeleteApplication) - (assert tmp%9#0) // OnCompletion is not DeleteApplication - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (!= tmp%10#0 0u) - (assert tmp%11#0) // can only call when not creating - tests/approvals/precompiled-apps.algo.ts::LargeProgram.delete() - return 1u - block@4: // switch_case_default_L48 - goto block@5 - block@5: // switch_case_next_L48 - goto block@10 - block@6: // bare_routing_L48 - let tmp%12#0: uint64 = (txn OnCompletion) - switch tmp%12#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L48 - let tmp%13#0: uint64 = (txn ApplicationID) - let tmp%14#0: bool = (== tmp%13#0 0u) - (assert tmp%14#0) // can only call when creating - tests/approvals/precompiled-apps.algo.ts::LargeProgram.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L48 - goto block@9 - block@9: // switch_case_next_L48 - goto block@10 - block@10: // after_if_else_L48 - return 0u - - subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.getBigBytesLength() -> uint64: - block@0: // L49 - let tmp%0#0: bytes = tests/approvals/precompiled-apps.algo.ts::getBigBytes() - let tmp%1#0: uint64 = (len tmp%0#0) - return tmp%1#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::getBigBytes() -> bytes: - block@0: // L44 - let tmp%0#0: bytes = (bzero 4096u) - return tmp%0#0 - - subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.delete() -> void: - block@0: // L53 - return - - subroutine tests/approvals/precompiled-apps.algo.ts::LargeProgram.__algots__.defaultCreate() -> void: - block@0: // L48 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ir/TerribleCustodialAccount.0.ssa.ir b/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ir/TerribleCustodialAccount.0.ssa.ir new file mode 100644 index 00000000..e6e861ac --- /dev/null +++ b/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ir/TerribleCustodialAccount.0.ssa.ir @@ -0,0 +1,3 @@ +main tests/approvals/precompiled-apps.algo.ts::program: + block@0: // L62 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ssa.ir b/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ssa.ir deleted file mode 100644 index 548fd240..00000000 --- a/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.ssa.ir +++ /dev/null @@ -1,4 +0,0 @@ -program logicsig tests/approvals/precompiled-apps.algo.ts::TerribleCustodialAccount: - subroutine tests/approvals/precompiled-apps.algo.ts::program() -> bool: - block@0: // L62 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.teal b/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.teal index a225946a..ea01a2f5 100644 --- a/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.teal +++ b/tests/approvals/out/precompiled-apps/TerribleCustodialAccount.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-apps.algo.ts::TerribleCustodialAccount: +// tests/approvals/precompiled-apps.algo.ts::program() -> uint64: +main: // tests/approvals/precompiled-apps.algo.ts:63 // return true pushint 1 // 1 diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.approval.teal b/tests/approvals/out/precompiled-factory/HelloFactory.approval.teal index 644aacd8..2ea22e92 100644 --- a/tests/approvals/out/precompiled-factory/HelloFactory.approval.teal +++ b/tests/approvals/out/precompiled-factory/HelloFactory.approval.teal @@ -1,33 +1,45 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-factory.algo.ts::HelloFactory.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 6 1 5 bytecblock 0x "world" base64(CoEBQw==) 0x151f7c75 0x24378d3c 0xd0a28200 "hello" 0x4c5c61ba - callsub __puya_arc4_router__ - return - -// tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/precompiled-factory.algo.ts:6 // class HelloFactory extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@8 + bz main_bare_routing@9 + +main_abi_routing@2: + // tests/approvals/precompiled-factory.algo.ts:6 + // class HelloFactory extends Contract { txna ApplicationArgs 0 pushbytes 0x2a17995c // method "test_compile_contract()void" pushbytes 0xe3254bc9 // method "test_compile_contract_with_template()void" pushbytes 0xe2b7c692 // method "test_compile_contract_with_template_and_custom_prefix()void" pushbytes 0x02947ca2 // method "test_compile_contract_large()void" uncover 4 - match __puya_arc4_router___test_compile_contract_route@2 __puya_arc4_router___test_compile_contract_with_template_route@3 __puya_arc4_router___test_compile_contract_with_template_and_custom_prefix_route@4 __puya_arc4_router___test_compile_contract_large_route@5 - b __puya_arc4_router___switch_case_default@6 + match main_test_compile_contract_route@3 main_test_compile_contract_with_template_route@4 main_test_compile_contract_with_template_and_custom_prefix_route@5 main_test_compile_contract_large_route@6 -__puya_arc4_router___test_compile_contract_route@2: - // tests/approvals/precompiled-factory.algo.ts:7 - // test_compile_contract() { +main_switch_case_default@7: + +main_switch_case_next@8: + +main_after_if_else@13: + // tests/approvals/precompiled-factory.algo.ts:6 + // class HelloFactory extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14: + return + +main_test_compile_contract_large_route@6: + // tests/approvals/precompiled-factory.algo.ts:100 + // test_compile_contract_large() { txn OnCompletion intc_0 // NoOp == @@ -36,13 +48,13 @@ __puya_arc4_router___test_compile_contract_route@2: intc_0 // 0 != assert // can only call when not creating - callsub test_compile_contract + callsub test_compile_contract_large intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14 -__puya_arc4_router___test_compile_contract_with_template_route@3: - // tests/approvals/precompiled-factory.algo.ts:38 - // test_compile_contract_with_template() { +main_test_compile_contract_with_template_and_custom_prefix_route@5: + // tests/approvals/precompiled-factory.algo.ts:69 + // test_compile_contract_with_template_and_custom_prefix() { txn OnCompletion intc_0 // NoOp == @@ -51,13 +63,13 @@ __puya_arc4_router___test_compile_contract_with_template_route@3: intc_0 // 0 != assert // can only call when not creating - callsub test_compile_contract_with_template + callsub test_compile_contract_with_template_and_custom_prefix intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14 -__puya_arc4_router___test_compile_contract_with_template_and_custom_prefix_route@4: - // tests/approvals/precompiled-factory.algo.ts:69 - // test_compile_contract_with_template_and_custom_prefix() { +main_test_compile_contract_with_template_route@4: + // tests/approvals/precompiled-factory.algo.ts:38 + // test_compile_contract_with_template() { txn OnCompletion intc_0 // NoOp == @@ -66,13 +78,13 @@ __puya_arc4_router___test_compile_contract_with_template_and_custom_prefix_route intc_0 // 0 != assert // can only call when not creating - callsub test_compile_contract_with_template_and_custom_prefix + callsub test_compile_contract_with_template intc_2 // 1 - retsub + b main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14 -__puya_arc4_router___test_compile_contract_large_route@5: - // tests/approvals/precompiled-factory.algo.ts:100 - // test_compile_contract_large() { +main_test_compile_contract_route@3: + // tests/approvals/precompiled-factory.algo.ts:7 + // test_compile_contract() { txn OnCompletion intc_0 // NoOp == @@ -81,23 +93,24 @@ __puya_arc4_router___test_compile_contract_large_route@5: intc_0 // 0 != assert // can only call when not creating - callsub test_compile_contract_large + callsub test_compile_contract intc_2 // 1 - retsub - -__puya_arc4_router___switch_case_default@6: - b __puya_arc4_router___after_if_else@12 + b main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14 -__puya_arc4_router___bare_routing@8: +main_bare_routing@9: // tests/approvals/precompiled-factory.algo.ts:6 // class HelloFactory extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@9 - b __puya_arc4_router___switch_case_default@10 + match main___algots__.defaultCreate@10 + +main_switch_case_default@11: + +main_switch_case_next@12: + b main_after_if_else@13 -__puya_arc4_router_____algots__.defaultCreate@9: +main___algots__.defaultCreate@10: // tests/approvals/precompiled-factory.algo.ts:6 // class HelloFactory extends Contract { txn ApplicationID @@ -106,15 +119,7 @@ __puya_arc4_router_____algots__.defaultCreate@9: assert // can only call when creating callsub __algots__.defaultCreate intc_2 // 1 - retsub - -__puya_arc4_router___switch_case_default@10: - -__puya_arc4_router___after_if_else@12: - // tests/approvals/precompiled-factory.algo.ts:6 - // class HelloFactory extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__@14 // tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract() -> void: @@ -150,7 +155,7 @@ test_compile_contract: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAEmAghncmVldGluZwAxGEAAA4gABIgACEOKAAAoKWeJigABMRsiE0EAiDYaAIAEIN86VIAEJDeNPIAEoOgYcoAE0KKCAE8EjgQAAwAYACgAOEIAWzEZIhJEMRgiEkQ2GgFXAgCIAE0jiTEZgQUSRDEYIhNEiABFI4kxGYEEEkQxGCITRIgAOSOJMRkiEkQxGCITRDYaAVcCAIgAKEkVFlcGAkxQgAQVH3x1TFCwI4lCAAAiiYoBACiL/2eJigAAiYoAAImKAQEiKGVEKUxQgAEgUIv/UIk=) + pushbytes base64(CiACAAEmAghncmVldGluZwAxGEAAA4gAljEbIhNBAIw2GgCABCDfOlSABCQ3jTyABKDoGHKABNCiggBPBI4EAE4APAAqAAIiQzEZIhJEMRgiE0Q2GgFXAgCIAGpJFRZXBgJMUIAEFR98dUxQsCNC/9cxGYEEEkQxGCITRIgAQyNC/8UxGYEFEkQxGCITRIgALSNC/7MxGSISRDEYIhJENhoBVwIAiAAOI0L/nEL/mIoAACgpZ4mKAQAoi/9niYoAAImKAACJigEBIihlRClMUIABIFCL/1CJ) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages @@ -171,6 +176,8 @@ test_compile_contract: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_next_txn@1: // tests/approvals/precompiled-factory.algo.ts:10-17 // const helloApp = itxn // .applicationCall({ @@ -229,6 +236,8 @@ test_compile_contract: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_next_txn@2: // tests/approvals/precompiled-factory.algo.ts:19-24 // const txn = itxn // .applicationCall({ @@ -282,6 +291,8 @@ test_compile_contract: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_next_txn@3: // tests/approvals/precompiled-factory.algo.ts:29-35 // itxn // .applicationCall({ @@ -319,7 +330,7 @@ test_compile_contract_with_template: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAASIABJDigAAiAAEKCpniYoAACgpZ4mKAAExGyITQQCCNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBAADABIAIgAyQgBVMRkiEkQxGCISRIgATSOJMRmBBRJEMRgiE0SIAEEjiTEZgQQSRDEYIhNEiAA1I4kxGSISRDEYIhNENhoBVwIAiAAkSRUWVwYCTFCABBUffHVMULAjiUIAACKJigAAiYoAAImKAACJigEBIihlRClMUIABIFCL/1CJ) + pushbytes base64(CiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJAxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABqSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIAEMjQv/FMRmBBRJEMRgiE0SIAC0jQv+zMRkiEkQxGCISRIgAGCNC/6JC/56KAACIAAQoKmeJigAAKClniYoAAImKAACJigAAiYoBASIoZUQpTFCAASBQi/9QiQ==) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages @@ -339,6 +350,8 @@ test_compile_contract_with_template: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_next_txn@1: // tests/approvals/precompiled-factory.algo.ts:41-48 // const helloApp = itxn // .applicationCall({ @@ -397,6 +410,8 @@ test_compile_contract_with_template: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_next_txn@2: // tests/approvals/precompiled-factory.algo.ts:50-55 // const txn = itxn // .applicationCall({ @@ -450,6 +465,8 @@ test_compile_contract_with_template: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_next_txn@3: // tests/approvals/precompiled-factory.algo.ts:60-66 // itxn // .applicationCall({ @@ -487,7 +504,7 @@ test_compile_contract_with_template_and_custom_prefix: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiAAEiAASQ4oAAIgABCgqZ4mKAAAoKWeJigABMRsiE0EAgjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQAAwASACIAMkIAVTEZIhJEMRgiEkSIAE0jiTEZgQUSRDEYIhNEiABBI4kxGYEEEkQxGCITRIgANSOJMRkiEkQxGCITRDYaAVcCAIgAJEkVFlcGAkxQgAQVH3x1TFCwI4lCAAAiiYoAAImKAACJigAAiYoBASIoZUQpTFCAASBQi/9QiQ==) + pushbytes base64(CiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACQMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAakkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiABDI0L/xTEZgQUSRDEYIhNEiAAtI0L/szEZIhJEMRgiEkSIABgjQv+iQv+eigAAiAAEKCpniYoAACgpZ4mKAACJigAAiYoAAImKAQEiKGVEKUxQgAEgUIv/UIk=) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages @@ -507,6 +524,8 @@ test_compile_contract_with_template_and_custom_prefix: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_and_custom_prefix_next_txn@1: // tests/approvals/precompiled-factory.algo.ts:72-79 // const helloApp = itxn // .applicationCall({ @@ -565,6 +584,8 @@ test_compile_contract_with_template_and_custom_prefix: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_and_custom_prefix_next_txn@2: // tests/approvals/precompiled-factory.algo.ts:81-86 // const txn = itxn // .applicationCall({ @@ -618,6 +639,8 @@ test_compile_contract_with_template_and_custom_prefix: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_with_template_and_custom_prefix_next_txn@3: // tests/approvals/precompiled-factory.algo.ts:91-97 // itxn // .applicationCall({ @@ -655,7 +678,7 @@ test_compile_contract_large: itxn_field ClearStateProgramPages bytec_0 // 0x itxn_field ClearStateProgramPages - pushbytes base64(CiACAAGIAAFDigABMRsiE0EARjYaAIAEAr8wz4AEJDeNPE8CjgIAAwAcQgApMRkiEkQxGCITRIgANhaABBUffHVMULAjiTEZgQUSRDEYIhNEiAAsI4lCABUxGSJMjgEAA0IACjEYIhJEiAAYI4kiiYoAAYgAAhWJigABgYAgr4mKAACJigAAiQ==) + pushbytes base64(CiACAAExGyITQQBGNhoAgAQCvzDPgAQkN408TwKOAgAUAAIiQzEZgQUSRDEYIhNEiABGI0L/7TEZIhJEMRgiE0SIACUWgAQVH3x1TFCwI0L/0jEZIkyOAQADQv/GMRgiEkSIABgjQv+7igABiAACFYmKAAGBgCCviYoAAImKAACJ) itxn_field ApprovalProgramPages bytec_0 // 0x itxn_field ApprovalProgramPages @@ -671,6 +694,8 @@ test_compile_contract_large: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_large_next_txn@1: // tests/approvals/precompiled-factory.algo.ts:103-110 // const largeApp = itxn // .applicationCall({ @@ -717,6 +742,8 @@ test_compile_contract_large: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_large_next_txn@2: // tests/approvals/precompiled-factory.algo.ts:112-117 // const txn = itxn // .applicationCall({ @@ -770,6 +797,8 @@ test_compile_contract_large: itxn_field TypeEnum intc_0 // 0 itxn_field Fee + +test_compile_contract_large_next_txn@3: // tests/approvals/precompiled-factory.algo.ts:122-128 // itxn // .applicationCall({ diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.arc32.json b/tests/approvals/out/precompiled-factory/HelloFactory.arc32.json index b0a76d65..f2fd8632 100644 --- a/tests/approvals/out/precompiled-factory/HelloFactory.arc32.json +++ b/tests/approvals/out/precompiled-factory/HelloFactory.arc32.json @@ -22,8 +22,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgNiAxIDUKICAgIGJ5dGVjYmxvY2sgMHggIndvcmxkIiBiYXNlNjQoQ29FQlF3PT0pIDB4MTUxZjdjNzUgMHgyNDM3OGQzYyAweGQwYTI4MjAwICJoZWxsbyIgMHg0YzVjNjFiYQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NwogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3QKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM4CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY5CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXgKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwOgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3QoKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdCgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgYnl0ZWMgNiAvLyAiaGVsbG8iCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNQogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OAogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKEhlbGxvKQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUFnaG5jbVZsZEdsdVp3QXhHRUFBQTRnQUJJZ0FDRU9LQUFBb0tXZUppZ0FCTVJzaUUwRUFpRFlhQUlBRUlOODZWSUFFSkRlTlBJQUVvT2dZY29BRTBLS0NBRThFamdRQUF3QVlBQ2dBT0VJQVd6RVpJaEpFTVJnaUVrUTJHZ0ZYQWdDSUFFMGppVEVaZ1FVU1JERVlJaE5FaUFCRkk0a3hHWUVFRWtReEdDSVRSSWdBT1NPSk1Sa2lFa1F4R0NJVFJEWWFBVmNDQUlnQUtFa1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0k0bENBQUFpaVlvQkFDaUwvMmVKaWdBQWlZb0FBSW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgyMGRmM2E1NCAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNgogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNwogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIyCiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjEKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTIzCiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzMKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMyAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzgKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBQVNJQUJKRGlnQUFpQUFFS0NwbmlZb0FBQ2dwWjRtS0FBRXhHeUlUUVFDQ05ob0FnQVJNWEdHNmdBUWtONDA4Z0FTZzZCaHlnQVRRb29JQVR3U09CQUFEQUJJQUlnQXlRZ0JWTVJraUVrUXhHQ0lTUklnQVRTT0pNUm1CQlJKRU1SZ2lFMFNJQUVFamlURVpnUVFTUkRFWUloTkVpQUExSTRreEdTSVNSREVZSWhORU5ob0JWd0lBaUFBa1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlVSUFBQ0tKaWdBQWlZb0FBSW1LQUFDSmlnRUJJaWhsUkNsTVVJQUJJRkNMLzFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ3CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQ4CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NQogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTMKICAgIC8vIGFwcElkOiBoZWxsb0FwcCwKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWMgNSAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY5CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQUVpQUFTUTRvQUFJZ0FCQ2dxWjRtS0FBQW9LV2VKaWdBQk1Sc2lFMEVBZ2pZYUFJQUVURnhodW9BRUpEZU5QSUFFb09nWWNvQUUwS0tDQUU4RWpnUUFBd0FTQUNJQU1rSUFWVEVaSWhKRU1SZ2lFa1NJQUUwamlURVpnUVVTUkRFWUloTkVpQUJCSTRreEdZRUVFa1F4R0NJVFJJZ0FOU09KTVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBSkVrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STRsQ0FBQWlpWW9BQUltS0FBQ0ppZ0FBaVlvQkFTSW9aVVFwVEZDQUFTQlFpLzlRaVE9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjc5CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODQKICAgIC8vIGFwcElkOiBoZWxsb0FwcCwKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MwogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWMgNSAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg3CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4OQogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2JvbmpvdXIgd29ybGQnKQogICAgcHVzaGJ5dGVzICJib25qb3VyIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OTUKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMyAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NAogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NgogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBR0lBQUZEaWdBQk1Sc2lFMEVBUmpZYUFJQUVBcjh3ejRBRUpEZU5QRThDamdJQUF3QWNRZ0FwTVJraUVrUXhHQ0lUUklnQU5oYUFCQlVmZkhWTVVMQWppVEVaZ1FVU1JERVlJaE5FaUFBc0k0bENBQlV4R1NKTWpnRUFBMElBQ2pFWUloSkVpQUFZSTRraWlZb0FBWWdBQWhXSmlnQUJnWUFncjRtS0FBQ0ppZ0FBaVE9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTEwOQogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTAKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMy0xMTAKICAgIC8vIGNvbnN0IGxhcmdlQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IGNvbXBpbGVkLmV4dHJhUHJvZ3JhbVBhZ2VzLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiBjb21waWxlZC5nbG9iYWxCeXRlcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExNAogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgcHVzaGJ5dGVzIDB4MDJiZjMwY2YgLy8gbWV0aG9kICJnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NwogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE3CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBbGpFYkloTkJBSXcyR2dDQUJDRGZPbFNBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFHcEpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQVF5TkMvOFV4R1lFRkVrUXhHQ0lUUklnQUxTTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFPSTBML25FTC9tSW9BQUNncFo0bUtBUUFvaS85bmlZb0FBSW1LQUFDSmlnRUJJaWhsUkNsTVVJQUJJRkNMLzFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgcHVzaGJ5dGVzIDB4MjBkZjNhNTQgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTYKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNwogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIyCiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjEKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTIzCiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI1CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hlbGxvIHdvcmxkJykKICAgIHB1c2hieXRlcyAiaGVsbG8gd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM4CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDYKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZSwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdoZXknIH0gfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FEYUdWNU1SaEFBQU9JQUpBeEd5SVRRUUNHTmhvQWdBUk1YR0c2Z0FRa040MDhnQVNnNkJoeWdBVFFvb0lBVHdTT0JBQk9BRHdBS2dBQ0lrTXhHU0lTUkRFWUloTkVOaG9CVndJQWlBQnFTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWpRdi9YTVJtQkJCSkVNUmdpRTBTSUFFTWpRdi9GTVJtQkJSSkVNUmdpRTBTSUFDMGpRdit6TVJraUVrUXhHQ0lTUklnQUdDTkMvNkpDLzU2S0FBQ0lBQVFvS21lSmlnQUFLQ2xuaVlvQUFJbUtBQUNKaWdBQWlZb0JBU0lvWlVRcFRGQ0FBU0JRaS85UWlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2OQogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXgoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjc3CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3MAogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKEhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXgsIHsgdGVtcGxhdGVWYXJzOiB7IEdSRUVUSU5HOiAnYm9uam91cicgfSwgdGVtcGxhdGVWYXJzUHJlZml4OiAnUFJGWF8nIH0pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQXdobmNtVmxkR2x1WndBSFltOXVhbTkxY2pFWVFBQURpQUNRTVJzaUUwRUFoallhQUlBRVRGeGh1b0FFSkRlTlBJQUVvT2dZY29BRTBLS0NBRThFamdRQVRnQThBQ29BQWlKRE1Sa2lFa1F4R0NJVFJEWWFBVmNDQUlnQWFra1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0kwTC8xekVaZ1FRU1JERVlJaE5FaUFCREkwTC94VEVaZ1FVU1JERVlJaE5FaUFBdEkwTC9zekVaSWhKRU1SZ2lFa1NJQUJnalF2K2lRditlaWdBQWlBQUVLQ3BuaVlvQUFDZ3BaNG1LQUFDSmlnQUFpWW9BQUltS0FRRWlLR1ZFS1V4UWdBRWdVSXYvVUlrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkdJMEwvN1RFWkloSkVNUmdpRTBTSUFDVVdnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUJnalF2KzdpZ0FCaUFBQ0ZZbUtBQUdCZ0NDdmlZb0FBSW1LQUFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTEwOQogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMy0xMTAKICAgIC8vIGNvbnN0IGxhcmdlQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IGNvbXBpbGVkLmV4dHJhUHJvZ3JhbVBhZ2VzLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiBjb21waWxlZC5nbG9iYWxCeXRlcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMAogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTcKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTE0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICBwdXNoYnl0ZXMgMHgwMmJmMzBjZiAvLyBtZXRob2QgImdldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE2CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHVpbnQ2ND4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gNDA5NikKICAgIHB1c2hpbnQgNDA5NiAvLyA0MDk2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyNgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyNQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.arc56.json b/tests/approvals/out/precompiled-factory/HelloFactory.arc56.json index 1a3c6e38..27d6a4af 100644 --- a/tests/approvals/out/precompiled-factory/HelloFactory.arc56.json +++ b/tests/approvals/out/precompiled-factory/HelloFactory.arc56.json @@ -105,34 +105,34 @@ "sourceInfo": [ { "pc": [ - 495, - 826, - 1159, - 1398 + 490, + 819, + 1150, + 1382 ], "errorMessage": "Bytes has valid prefix" }, { "pc": [ - 107, - 122, - 137, - 152 + 99, + 116, + 133, + 150 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 181 + 178 ], "errorMessage": "can only call when creating" }, { "pc": [ - 112, - 127, - 142, - 157 + 104, + 121, + 138, + 155 ], "errorMessage": "can only call when not creating" } @@ -145,8 +145,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgNiAxIDUKICAgIGJ5dGVjYmxvY2sgMHggIndvcmxkIiBiYXNlNjQoQ29FQlF3PT0pIDB4MTUxZjdjNzUgMHgyNDM3OGQzYyAweGQwYTI4MjAwICJoZWxsbyIgMHg0YzVjNjFiYQogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAxCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDUKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX190ZXN0X2NvbXBpbGVfY29udHJhY3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NwogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3QKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM4CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY5CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXgKICAgIGludGNfMiAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMTIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMAoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwOgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3QoKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3Q6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdCgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgYnl0ZWMgNiAvLyAiaGVsbG8iCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNQogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OAogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKEhlbGxvKQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUFnaG5jbVZsZEdsdVp3QXhHRUFBQTRnQUJJZ0FDRU9LQUFBb0tXZUppZ0FCTVJzaUUwRUFpRFlhQUlBRUlOODZWSUFFSkRlTlBJQUVvT2dZY29BRTBLS0NBRThFamdRQUF3QVlBQ2dBT0VJQVd6RVpJaEpFTVJnaUVrUTJHZ0ZYQWdDSUFFMGppVEVaZ1FVU1JERVlJaE5FaUFCRkk0a3hHWUVFRWtReEdDSVRSSWdBT1NPSk1Sa2lFa1F4R0NJVFJEWWFBVmNDQUlnQUtFa1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0k0bENBQUFpaVlvQkFDaUwvMmVKaWdBQWlZb0FBSW1LQVFFaUtHVkVLVXhRZ0FFZ1VJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBwdXNoYnl0ZXMgMHgyMGRmM2E1NCAvLyBtZXRob2QgImNyZWF0ZShzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMC0xNgogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNwogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIyCiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjEKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTIzCiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTI0CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gZGVjb2RlQXJjNDxzdHJpbmc+KHR4bi5sYXN0TG9nLCAnbG9nJykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChyZXN1bHQgPT09ICdoZWxsbyB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhlbGxvIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzMKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMyAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyOS0zNQogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSAtPiB2b2lkOgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzgKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0NgogICAgLy8gZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICBpbnRjXzIgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IGNvbXBpbGVkID0gY29tcGlsZShIZWxsb1RlbXBsYXRlLCB7IHRlbXBsYXRlVmFyczogeyBHUkVFVElORzogJ2hleScgfSB9KQogICAgYnl0ZWNfMiAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDaUFDQUFFbUF3aG5jbVZsZEdsdVp3QURhR1Y1TVJoQUFBT0lBQVNJQUJKRGlnQUFpQUFFS0NwbmlZb0FBQ2dwWjRtS0FBRXhHeUlUUVFDQ05ob0FnQVJNWEdHNmdBUWtONDA4Z0FTZzZCaHlnQVRRb29JQVR3U09CQUFEQUJJQUlnQXlRZ0JWTVJraUVrUXhHQ0lTUklnQVRTT0pNUm1CQlJKRU1SZ2lFMFNJQUVFamlURVpnUVFTUkRFWUloTkVpQUExSTRreEdTSVNSREVZSWhORU5ob0JWd0lBaUFBa1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlVSUFBQ0tKaWdBQWlZb0FBSW1LQUFDSmlnRUJJaWhsUkNsTVVJQUJJRkNMLzFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ3CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQ4CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NQogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTMKICAgIC8vIGFwcElkOiBoZWxsb0FwcCwKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWMgNSAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY5CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzcKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcwCiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZUN1c3RvbVByZWZpeCwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdib25qb3VyJyB9LCB0ZW1wbGF0ZVZhcnNQcmVmaXg6ICdQUkZYXycgfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FIWW05dWFtOTFjakVZUUFBRGlBQUVpQUFTUTRvQUFJZ0FCQ2dxWjRtS0FBQW9LV2VKaWdBQk1Sc2lFMEVBZ2pZYUFJQUVURnhodW9BRUpEZU5QSUFFb09nWWNvQUUwS0tDQUU4RWpnUUFBd0FTQUNJQU1rSUFWVEVaSWhKRU1SZ2lFa1NJQUUwamlURVpnUVVTUkRFWUloTkVpQUJCSTRreEdZRUVFa1F4R0NJVFJJZ0FOU09KTVJraUVrUXhHQ0lUUkRZYUFWY0NBSWdBSkVrVkZsY0dBa3hRZ0FRVkgzeDFURkN3STRsQ0FBQWlpWW9BQUltS0FBQ0ppZ0FBaVlvQkFTSW9aVVFwVEZDQUFTQlFpLzlRaVE9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjc5CiAgICAvLyAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3Mi03OQogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODQKICAgIC8vIGFwcElkOiBoZWxsb0FwcCwKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MwogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWMgNSAvLyBtZXRob2QgImdyZWV0KHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg3CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4OQogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2JvbmpvdXIgd29ybGQnKQogICAgcHVzaGJ5dGVzICJib25qb3VyIHdvcmxkIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OTUKICAgIC8vIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludGNfMyAvLyA1CiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NAogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NgogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBR0lBQUZEaWdBQk1Sc2lFMEVBUmpZYUFJQUVBcjh3ejRBRUpEZU5QRThDamdJQUF3QWNRZ0FwTVJraUVrUXhHQ0lUUklnQU5oYUFCQlVmZkhWTVVMQWppVEVaZ1FVU1JERVlJaE5FaUFBc0k0bENBQlV4R1NKTWpnRUFBMElBQ2pFWUloSkVpQUFZSTRraWlZb0FBWWdBQWhXSmlnQUJnWUFncjRtS0FBQ0ppZ0FBaVE9PSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTEwOQogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTAKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMy0xMTAKICAgIC8vIGNvbnN0IGxhcmdlQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IGNvbXBpbGVkLmV4dHJhUHJvZ3JhbVBhZ2VzLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiBjb21waWxlZC5nbG9iYWxCeXRlcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGR1cAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExNAogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgcHVzaGJ5dGVzIDB4MDJiZjMwY2YgLy8gbWV0aG9kICJnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE3CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8dWludDY0Pih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIwCiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSA0MDk2KQogICAgcHVzaGludCA0MDk2IC8vIDQwOTYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTI1CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA2IDEgNQogICAgYnl0ZWNibG9jayAweCAid29ybGQiIGJhc2U2NChDb0VCUXc9PSkgMHgxNTFmN2M3NSAweDI0Mzc4ZDNjIDB4ZDBhMjgyMDAgImhlbGxvIiAweDRjNWM2MWJhCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmExNzk5NWMgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3QoKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhlMzI1NGJjOSAvLyBtZXRob2QgInRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZTJiN2M2OTIgLy8gbWV0aG9kICJ0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweDAyOTQ3Y2EyIC8vIG1ldGhvZCAidGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCl2b2lkIgogICAgdW5jb3ZlciA0CiAgICBtYXRjaCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzIG1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfcm91dGVANCBtYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4X3JvdXRlQDUgbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2Vfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQ6CiAgICByZXR1cm4KCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2UKICAgIGludGNfMiAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjkKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl90ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozOAogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGUoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX3Rlc3RfY29tcGlsZV9jb250cmFjdF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfY29tcGlsZV9jb250cmFjdAogICAgaW50Y18yIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NgogICAgLy8gY2xhc3MgSGVsbG9GYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDEwCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTE6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTI6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYKICAgIC8vIGNsYXNzIEhlbGxvRmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NwogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0KCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwLTE3CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoc3RyaW5nKXZvaWQnKSwgZW5jb2RlQXJjNCgnaGVsbG8nKV0sCiAgICBieXRlYyA2IC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDYgLy8gImhlbGxvIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE1CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG8pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQWdobmNtVmxkR2x1WndBeEdFQUFBNGdBbGpFYkloTkJBSXcyR2dDQUJDRGZPbFNBQkNRM2pUeUFCS0RvR0hLQUJOQ2lnZ0JQQkk0RUFFNEFQQUFxQUFJaVF6RVpJaEpFTVJnaUUwUTJHZ0ZYQWdDSUFHcEpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNDTkMvOWN4R1lFRUVrUXhHQ0lUUklnQVF5TkMvOFV4R1lFRkVrUXhHQ0lUUklnQUxTTkMvN014R1NJU1JERVlJaEpFTmhvQlZ3SUFpQUFPSTBML25FTC9tSW9BQUNncFo0bUtBUUFvaS85bmlZb0FBSW1LQUFDSmlnRUJJaWhsUkNsTVVJQUJJRkNMLzFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKHN0cmluZyl2b2lkJyksIGVuY29kZUFyYzQoJ2hlbGxvJyldLAogICAgcHVzaGJ5dGVzIDB4MjBkZjNhNTQgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTYKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxNwogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAtMTcKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZShzdHJpbmcpdm9pZCcpLCBlbmNvZGVBcmM0KCdoZWxsbycpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIxCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjIyCiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjEKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjE5LTIzCiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTktMjQKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI1CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hlbGxvIHdvcmxkJykKICAgIHB1c2hieXRlcyAiaGVsbG8gd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czozMwogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjMyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjI5LTM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MjktMzUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo6SGVsbG9GYWN0b3J5LnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM4CiAgICAvLyB0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDYKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgaW50Y18yIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBjb21waWxlZCA9IGNvbXBpbGUoSGVsbG9UZW1wbGF0ZSwgeyB0ZW1wbGF0ZVZhcnM6IHsgR1JFRVRJTkc6ICdoZXknIH0gfSkKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRW1Bd2huY21WbGRHbHVad0FEYUdWNU1SaEFBQU9JQUpBeEd5SVRRUUNHTmhvQWdBUk1YR0c2Z0FRa040MDhnQVNnNkJoeWdBVFFvb0lBVHdTT0JBQk9BRHdBS2dBQ0lrTXhHU0lTUkRFWUloTkVOaG9CVndJQWlBQnFTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWpRdi9YTVJtQkJCSkVNUmdpRTBTSUFFTWpRdi9GTVJtQkJSSkVNUmdpRTBTSUFDMGpRdit6TVJraUVrUXhHQ0lTUklnQUdDTkMvNkpDLzU2S0FBQ0lBQVFvS21lSmlnQUFLQ2xuaVlvQUFJbUtBQUNKaWdBQWlZb0JBU0lvWlVRcFRGQ0FBU0JRaS85UWlRPT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDcgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo0MS00NwogICAgLy8gY29uc3QgaGVsbG9BcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogMSwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgaXR4bl9zdWJtaXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NDgKICAgIC8vIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUwLTU1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MgogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgYnl0ZWNfMSAvLyAid29ybGQiCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MwogICAgLy8gYXBwSWQ6IGhlbGxvQXBwLAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlYyA1IC8vIG1ldGhvZCAiZ3JlZXQoc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NTAtNTUKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHN0cmluZz4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo1OAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gJ2hleSB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImhleSB3b3JsZCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjY0CiAgICAvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnRjXzMgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NjAtNjUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKCnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX25leHRfdHhuQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjYwLTY2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6OkhlbGxvRmFjdG9yeS50ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeCgpIC0+IHZvaWQ6CnRlc3RfY29tcGlsZV9jb250cmFjdF93aXRoX3RlbXBsYXRlX2FuZF9jdXN0b21fcHJlZml4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2OQogICAgLy8gdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXgoKSB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjc3CiAgICAvLyBnbG9iYWxOdW1CeXRlczogMSwKICAgIGludGNfMiAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3MAogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKEhlbGxvVGVtcGxhdGVDdXN0b21QcmVmaXgsIHsgdGVtcGxhdGVWYXJzOiB7IEdSRUVUSU5HOiAnYm9uam91cicgfSwgdGVtcGxhdGVWYXJzUHJlZml4OiAnUFJGWF8nIH0pCiAgICBieXRlY18yIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWNfMCAvLyAweAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUNBQUVtQXdobmNtVmxkR2x1WndBSFltOXVhbTkxY2pFWVFBQURpQUNRTVJzaUUwRUFoallhQUlBRVRGeGh1b0FFSkRlTlBJQUVvT2dZY29BRTBLS0NBRThFamdRQVRnQThBQ29BQWlKRE1Sa2lFa1F4R0NJVFJEWWFBVmNDQUlnQWFra1ZGbGNHQWt4UWdBUVZIM3gxVEZDd0kwTC8xekVaZ1FRU1JERVlJaE5FaUFCREkwTC94VEVaZ1FVU1JERVlJaE5FaUFBdEkwTC9zekVaSWhKRU1SZ2lFa1NJQUJnalF2K2lRditlaWdBQWlBQUVLQ3BuaVlvQUFDZ3BaNG1LQUFDSmlnQUFpWW9BQUltS0FRRWlLR1ZFS1V4UWdBRWdVSXYvVUlrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzQKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignY3JlYXRlKCl2b2lkJyldLAogICAgYnl0ZWMgNyAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjcyLTc4CiAgICAvLyBjb25zdCBoZWxsb0FwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdjcmVhdGUoKXZvaWQnKV0sCiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiAxLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X3dpdGhfdGVtcGxhdGVfYW5kX2N1c3RvbV9wcmVmaXhfbmV4dF90eG5AMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo3OQogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6NzItNzkKICAgIC8vIGNvbnN0IGhlbGxvQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2NyZWF0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IDEsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBkdXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODEtODYKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdncmVldChzdHJpbmcpc3RyaW5nJyksIGVuY29kZUFyYzQoJ3dvcmxkJyldLAogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgzCiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICBieXRlY18xIC8vICJ3b3JsZCIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzEgLy8gIndvcmxkIgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg0CiAgICAvLyBhcHBJZDogaGVsbG9BcHAsCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODMKICAgIC8vIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIGJ5dGVjIDUgLy8gbWV0aG9kICJncmVldChzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjgxLTg1CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ3JlZXQoc3RyaW5nKXN0cmluZycpLCBlbmNvZGVBcmM0KCd3b3JsZCcpXSwKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo4MS04NgogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dyZWV0KHN0cmluZylzdHJpbmcnKSwgZW5jb2RlQXJjNCgnd29ybGQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGhlbGxvQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGRlY29kZUFyYzQ8c3RyaW5nPih0eG4ubGFzdExvZywgJ2xvZycpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQocmVzdWx0ID09PSAnYm9uam91ciB3b3JsZCcpCiAgICBwdXNoYnl0ZXMgImJvbmpvdXIgd29ybGQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5NQogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjk0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjkxLTk2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBoZWxsb0FwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3Rfd2l0aF90ZW1wbGF0ZV9hbmRfY3VzdG9tX3ByZWZpeF9uZXh0X3R4bkAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo5MS05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogaGVsbG9BcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkudGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlKCkgLT4gdm9pZDoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDAKICAgIC8vIHRlc3RfY29tcGlsZV9jb250cmFjdF9sYXJnZSgpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMDMtMTEwCiAgICAvLyBjb25zdCBsYXJnZUFwcCA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBjb21waWxlZC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGNvbXBpbGVkLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGV4dHJhUHJvZ3JhbVBhZ2VzOiBjb21waWxlZC5leHRyYVByb2dyYW1QYWdlcywKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogY29tcGlsZWQuZ2xvYmFsQnl0ZXMsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKS5jcmVhdGVkQXBwCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgY29tcGlsZWQgPSBjb21waWxlKExhcmdlUHJvZ3JhbSkKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzIgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlY18wIC8vIDB4CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIHB1c2hieXRlcyBiYXNlNjQoQ2lBQ0FBRXhHeUlUUVFCR05ob0FnQVFDdnpEUGdBUWtONDA4VHdLT0FnQVVBQUlpUXpFWmdRVVNSREVZSWhORWlBQkdJMEwvN1RFWkloSkVNUmdpRTBTSUFDVVdnQVFWSDN4MVRGQ3dJMEwvMGpFWklreU9BUUFEUXYvR01SZ2lFa1NJQUJnalF2KzdpZ0FCaUFBQ0ZZbUtBQUdCZ0NDdmlZb0FBSW1LQUFDSikKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTEwOQogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQoKdGVzdF9jb21waWxlX2NvbnRyYWN0X2xhcmdlX25leHRfdHhuQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEwMy0xMTAKICAgIC8vIGNvbnN0IGxhcmdlQXBwID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHByb3ZhbFByb2dyYW06IGNvbXBpbGVkLmFwcHJvdmFsUHJvZ3JhbSwKICAgIC8vICAgICBjbGVhclN0YXRlUHJvZ3JhbTogY29tcGlsZWQuY2xlYXJTdGF0ZVByb2dyYW0sCiAgICAvLyAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IGNvbXBpbGVkLmV4dHJhUHJvZ3JhbVBhZ2VzLAogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiBjb21waWxlZC5nbG9iYWxCeXRlcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMAogICAgLy8gLnN1Ym1pdCgpLmNyZWF0ZWRBcHAKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTAzLTExMAogICAgLy8gY29uc3QgbGFyZ2VBcHAgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogY29tcGlsZWQuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBjb21waWxlZC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBleHRyYVByb2dyYW1QYWdlczogY29tcGlsZWQuZXh0cmFQcm9ncmFtUGFnZXMsCiAgICAvLyAgICAgZ2xvYmFsTnVtQnl0ZXM6IGNvbXBpbGVkLmdsb2JhbEJ5dGVzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkuY3JlYXRlZEFwcAogICAgZHVwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjExMi0xMTcKICAgIC8vIGNvbnN0IHR4biA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdnZXRCaWdCeXRlc0xlbmd0aCgpdWludDY0JyldLAogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTE0CiAgICAvLyBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICBwdXNoYnl0ZXMgMHgwMmJmMzBjZiAvLyBtZXRob2QgImdldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMTItMTE2CiAgICAvLyBjb25zdCB0eG4gPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZ2V0QmlnQnl0ZXNMZW5ndGgoKXVpbnQ2NCcpXSwKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTEyLTExNwogICAgLy8gY29uc3QgdHhuID0gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2dldEJpZ0J5dGVzTGVuZ3RoKCl1aW50NjQnKV0sCiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCByZXN1bHQgPSBkZWNvZGVBcmM0PHVpbnQ2ND4odHhuLmxhc3RMb2csICdsb2cnKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMAogICAgLy8gYXNzZXJ0KHJlc3VsdCA9PT0gNDA5NikKICAgIHB1c2hpbnQgNDA5NiAvLyA0MDk2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyMi0xMjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwSWQ6IGxhcmdlQXBwLAogICAgLy8gICAgIGFwcEFyZ3M6IFttZXRob2RTZWxlY3RvcignZGVsZXRlKCl2b2lkJyldLAogICAgLy8gICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyNgogICAgLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50Y18zIC8vIDUKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjEyNQogICAgLy8gYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICBieXRlYyA0IC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czoxMjItMTI3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcElkOiBsYXJnZUFwcCwKICAgIC8vICAgICBhcHBBcmdzOiBbbWV0aG9kU2VsZWN0b3IoJ2RlbGV0ZSgpdm9pZCcpXSwKICAgIC8vICAgICBvbkNvbXBsZXRpb246IE9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCgp0ZXN0X2NvbXBpbGVfY29udHJhY3RfbGFyZ2VfbmV4dF90eG5AMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVjb21waWxlZC1mYWN0b3J5LmFsZ28udHM6MTIyLTEyOAogICAgLy8gaXR4bgogICAgLy8gICAuYXBwbGljYXRpb25DYWxsKHsKICAgIC8vICAgICBhcHBJZDogbGFyZ2VBcHAsCiAgICAvLyAgICAgYXBwQXJnczogW21ldGhvZFNlbGVjdG9yKCdkZWxldGUoKXZvaWQnKV0sCiAgICAvLyAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlY29tcGlsZWQtZmFjdG9yeS5hbGdvLnRzOjpIZWxsb0ZhY3RvcnkuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWNvbXBpbGVkLWZhY3RvcnkuYWxnby50czo2CiAgICAvLyBjbGFzcyBIZWxsb0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiAEAAYBBSYIAAV3b3JsZAQKgQFDBBUffHUEJDeNPATQooIABWhlbGxvBExcYboxGyITQQBtNhoAgAQqF5lcgATjJUvJgATit8aSgAQClHyiTwSOBAA1ACQAEwACIkMxGSISRDEYIhNEiAQ5JEL/7jEZIhJEMRgiE0SIAtkkQv/dMRkiEkQxGCITRIgBgSRC/8wxGSISRDEYIhNEiAAbJEL/uzEZIkyOAQADQv+vMRgiEkSIBMkkQv+kigAAsScGFRZXBgInBlAksjUqskIoskKA2AEKIAIAASYCCGdyZWV0aW5nADEYQAADiACWMRsiE0EAjDYaAIAEIN86VIAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAakkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiABDI0L/xTEZgQUSRDEYIhNEiAAtI0L/szEZIhJEMRgiEkQ2GgFXAgCIAA4jQv+cQv+YigAAKClniYoBACiL/2eJigAAiYoAAImKAQEiKGVEKUxQgAEgUIv/UImyQCiyQIAEIN86VLIashojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCAC2hlbGxvIHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mKAACxJLI1KrJCKLJCgNwBCiACAAEmAwhncmVldGluZwADaGV5MRhAAAOIAJAxGyITQQCGNhoAgARMXGG6gAQkN408gASg6BhygATQooIATwSOBABOADwAKgACIkMxGSISRDEYIhNENhoBVwIAiABqSRUWVwYCTFCABBUffHVMULAjQv/XMRmBBBJEMRgiE0SIAEMjQv/FMRmBBRJEMRgiE0SIAC0jQv+zMRkiEkQxGCISRIgAGCNC/6JC/56KAACIAAQoKmeJigAAKClniYoAAImKAACJigAAiYoBASIoZUQpTFCAASBQi/9QibJAKLJAJweyGiOyECKyAbO0PUmxKRUWVwYCKVBMshgnBbIashojshAisgGztD5JVwQATFcABCsSRFcCAIAJaGV5IHdvcmxkEkSxJbIZJwSyGrIYI7IQIrIBs4mKAACxJLI1KrJCKLJCgOABCiACAAEmAwhncmVldGluZwAHYm9uam91cjEYQAADiACQMRsiE0EAhjYaAIAETFxhuoAEJDeNPIAEoOgYcoAE0KKCAE8EjgQATgA8ACoAAiJDMRkiEkQxGCITRDYaAVcCAIgAakkVFlcGAkxQgAQVH3x1TFCwI0L/1zEZgQQSRDEYIhNEiABDI0L/xTEZgQUSRDEYIhNEiAAtI0L/szEZIhJEMRgiEkSIABgjQv+iQv+eigAAiAAEKCpniYoAACgpZ4mKAACJigAAiYoAAImKAQEiKGVEKUxQgAEgUIv/UImyQCiyQCcHshojshAisgGztD1JsSkVFlcGAilQTLIYJwWyGrIaI7IQIrIBs7Q+SVcEAExXAAQrEkRXAgCADWJvbmpvdXIgd29ybGQSRLElshknBLIashgjshAisgGziYoAALEisjUisjgqskIoskKAgQEKIAIAATEbIhNBAEY2GgCABAK/MM+ABCQ3jTxPAo4CABQAAiJDMRmBBRJEMRgiE0SIAEYjQv/tMRkiEkQxGCITRIgAJRaABBUffHVMULAjQv/SMRkiTI4BAANC/8YxGCISRIgAGCNC/7uKAAGIAAIViYoAAYGAIK+JigAAiYoAAImyQCiyQCOyECKyAbO0PUmxshiABAK/MM+yGiOyECKyAbO0PklXBABMVwAEKxJEF4GAIBJEsSWyGScEshqyGCOyECKyAbOJigAAiQ==", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.clear.teal b/tests/approvals/out/precompiled-factory/HelloFactory.clear.teal index 2093729d..a4d58047 100644 --- a/tests/approvals/out/precompiled-factory/HelloFactory.clear.teal +++ b/tests/approvals/out/precompiled-factory/HelloFactory.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/precompiled-factory.algo.ts::HelloFactory.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.approval.0.ssa.ir b/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.approval.0.ssa.ir new file mode 100644 index 00000000..43b42c24 --- /dev/null +++ b/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.approval.0.ssa.ir @@ -0,0 +1,1208 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__() -> bool: + block@0: // L6 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L6 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_compile_contract()void" => block@2, method "test_compile_contract_with_template()void" => block@3, method "test_compile_contract_with_template_and_custom_prefix()void" => block@4, method "test_compile_contract_large()void" => block@5, * => block@6} + block@2: // test_compile_contract_route_L7 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract() + return 1u + block@3: // test_compile_contract_with_template_route_L38 + let tmp%7#0: uint64 = (txn OnCompletion) + let tmp%8#0: bool = (== tmp%7#0 NoOp) + (assert tmp%8#0) // OnCompletion is not NoOp + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (!= tmp%9#0 0u) + (assert tmp%10#0) // can only call when not creating + tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template() + return 1u + block@4: // test_compile_contract_with_template_and_custom_prefix_route_L69 + let tmp%11#0: uint64 = (txn OnCompletion) + let tmp%12#0: bool = (== tmp%11#0 NoOp) + (assert tmp%12#0) // OnCompletion is not NoOp + let tmp%13#0: uint64 = (txn ApplicationID) + let tmp%14#0: bool = (!= tmp%13#0 0u) + (assert tmp%14#0) // can only call when not creating + tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template_and_custom_prefix() + return 1u + block@5: // test_compile_contract_large_route_L100 + let tmp%15#0: uint64 = (txn OnCompletion) + let tmp%16#0: bool = (== tmp%15#0 NoOp) + (assert tmp%16#0) // OnCompletion is not NoOp + let tmp%17#0: uint64 = (txn ApplicationID) + let tmp%18#0: bool = (!= tmp%17#0 0u) + (assert tmp%18#0) // can only call when not creating + tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_large() + return 1u + block@6: // switch_case_default_L6 + goto block@7 + block@7: // switch_case_next_L6 + goto block@12 + block@8: // bare_routing_L6 + let tmp%19#0: uint64 = (txn OnCompletion) + switch tmp%19#0 {0u => block@9, * => block@10} + block@9: // __algots__.defaultCreate_L6 + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (== tmp%20#0 0u) + (assert tmp%21#0) // can only call when creating + tests/approvals/precompiled-factory.algo.ts::HelloFactory.__algots__.defaultCreate() + return 1u + block@10: // switch_case_default_L6 + goto block@11 + block@11: // switch_case_next_L6 + goto block@12 + block@12: // after_if_else_L6 + return 0u + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract() -> void: + block@0: // L7 + let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ApprovalProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ApprovalProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ClearStateProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ClearStateProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ExtraProgramPages, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=GlobalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=GlobalNumByteSlice, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=LocalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=LocalNumByteSlice, program_page=None)) + itxn_begin + let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) + let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%0%%Fee_length#0: uint64 = 1u + let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u + let length%0#0: uint64 = (len "hello") + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 "hello") + let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create(string)void" + let inner_txn_params%0%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 + let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 2u + let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 + let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 + let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 + let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 + let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u + let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u + let inner_txn_params%0%%Sender_length#0: uint64 = 0u + let inner_txn_params%0%%Note_length#0: uint64 = 0u + let inner_txn_params%0%%Receiver_length#0: uint64 = 0u + let inner_txn_params%0%%Amount_length#0: uint64 = 0u + let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%0%%VotePK_length#0: uint64 = 0u + let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%0%%Type_length#0: uint64 = 0u + let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u + let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%0%%Accounts_length#0: uint64 = 0u + let inner_txn_params%0%%Assets_length#0: uint64 = 0u + let inner_txn_params%0%%Applications_length#0: uint64 = 0u + ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) + ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_1#0) + ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L10 + itxn_submit + let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID + itxn_begin + let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) + let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%1%%Fee_length#0: uint64 = 1u + let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u + let length%1#0: uint64 = (len "world") + let as_bytes%1#0: bytes = (itob length%1#0) + let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 "world") + let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" + let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%1#0 + let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%1%%Sender_length#0: uint64 = 0u + let inner_txn_params%1%%Note_length#0: uint64 = 0u + let inner_txn_params%1%%Receiver_length#0: uint64 = 0u + let inner_txn_params%1%%Amount_length#0: uint64 = 0u + let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%1%%VotePK_length#0: uint64 = 0u + let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%1%%Type_length#0: uint64 = 0u + let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%1%%Accounts_length#0: uint64 = 0u + let inner_txn_params%1%%Assets_length#0: uint64 = 0u + let inner_txn_params%1%%Applications_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) + ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L19 + itxn_submit + let txn#0: itxn_group_idx = itxn_group_idx(0) + let txn._is_last#0: bool = 1u + let txn.Sender#0: bytes = itxn[txn#0].Sender + let txn.Fee#0: uint64 = itxn[txn#0].Fee + let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid + let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime + let txn.LastValid#0: uint64 = itxn[txn#0].LastValid + let txn.Note#0: bytes = itxn[txn#0].Note + let txn.Lease#0: bytes = itxn[txn#0].Lease + let txn.Receiver#0: bytes = itxn[txn#0].Receiver + let txn.Amount#0: uint64 = itxn[txn#0].Amount + let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo + let txn.VotePK#0: bytes = itxn[txn#0].VotePK + let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK + let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst + let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast + let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution + let txn.Type#0: bytes = itxn[txn#0].Type + let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum + let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset + let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount + let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender + let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver + let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo + let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex + let txn.TxID#0: bytes = itxn[txn#0].TxID + let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID + let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion + let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs + let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts + let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram + let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram + let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo + let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset + let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal + let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals + let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen + let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName + let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName + let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL + let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash + let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager + let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve + let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze + let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback + let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset + let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount + let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen + let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets + let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications + let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint + let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice + let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint + let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice + let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages + let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation + let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs + let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID + let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID + let txn.LastLog#0: bytes = itxn[txn#0].LastLog + let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK + let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages + let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages + let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) + let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // Bytes has valid prefix + let result#0: bytes = ((extract 2 0) tmp%0#0) + let tmp%3#0: bool = (== result#0 "hello world") + (assert tmp%3#0) + itxn_begin + let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) + let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%2%%Fee_length#0: uint64 = 1u + let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" + let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u + let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u + let inner_txn_params%2%%Sender_length#0: uint64 = 0u + let inner_txn_params%2%%Note_length#0: uint64 = 0u + let inner_txn_params%2%%Receiver_length#0: uint64 = 0u + let inner_txn_params%2%%Amount_length#0: uint64 = 0u + let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%2%%VotePK_length#0: uint64 = 0u + let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%2%%Type_length#0: uint64 = 0u + let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%2%%Accounts_length#0: uint64 = 0u + let inner_txn_params%2%%Assets_length#0: uint64 = 0u + let inner_txn_params%2%%Applications_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L29 + itxn_submit + return + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template() -> void: + block@0: // L38 + let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ApprovalProgramPages, program_page=0, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ApprovalProgramPages, program_page=1, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ClearStateProgramPages, program_page=0, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ClearStateProgramPages, program_page=1, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ExtraProgramPages, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=GlobalNumUint, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=GlobalNumByteSlice, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=LocalNumUint, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=LocalNumByteSlice, program_page=None, TMPL_GREETING="hey")) + itxn_begin + let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) + let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%0%%Fee_length#0: uint64 = 1u + let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create()void" + let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 + let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 + let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 + let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 + let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u + let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u + let inner_txn_params%0%%Sender_length#0: uint64 = 0u + let inner_txn_params%0%%Note_length#0: uint64 = 0u + let inner_txn_params%0%%Receiver_length#0: uint64 = 0u + let inner_txn_params%0%%Amount_length#0: uint64 = 0u + let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%0%%VotePK_length#0: uint64 = 0u + let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%0%%Type_length#0: uint64 = 0u + let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u + let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%0%%Accounts_length#0: uint64 = 0u + let inner_txn_params%0%%Assets_length#0: uint64 = 0u + let inner_txn_params%0%%Applications_length#0: uint64 = 0u + ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) + ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L41 + itxn_submit + let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID + itxn_begin + let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) + let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%1%%Fee_length#0: uint64 = 1u + let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u + let length%0#0: uint64 = (len "world") + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 "world") + let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" + let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 + let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%1%%Sender_length#0: uint64 = 0u + let inner_txn_params%1%%Note_length#0: uint64 = 0u + let inner_txn_params%1%%Receiver_length#0: uint64 = 0u + let inner_txn_params%1%%Amount_length#0: uint64 = 0u + let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%1%%VotePK_length#0: uint64 = 0u + let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%1%%Type_length#0: uint64 = 0u + let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%1%%Accounts_length#0: uint64 = 0u + let inner_txn_params%1%%Assets_length#0: uint64 = 0u + let inner_txn_params%1%%Applications_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) + ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L50 + itxn_submit + let txn#0: itxn_group_idx = itxn_group_idx(0) + let txn._is_last#0: bool = 1u + let txn.Sender#0: bytes = itxn[txn#0].Sender + let txn.Fee#0: uint64 = itxn[txn#0].Fee + let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid + let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime + let txn.LastValid#0: uint64 = itxn[txn#0].LastValid + let txn.Note#0: bytes = itxn[txn#0].Note + let txn.Lease#0: bytes = itxn[txn#0].Lease + let txn.Receiver#0: bytes = itxn[txn#0].Receiver + let txn.Amount#0: uint64 = itxn[txn#0].Amount + let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo + let txn.VotePK#0: bytes = itxn[txn#0].VotePK + let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK + let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst + let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast + let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution + let txn.Type#0: bytes = itxn[txn#0].Type + let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum + let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset + let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount + let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender + let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver + let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo + let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex + let txn.TxID#0: bytes = itxn[txn#0].TxID + let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID + let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion + let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs + let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts + let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram + let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram + let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo + let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset + let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal + let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals + let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen + let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName + let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName + let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL + let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash + let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager + let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve + let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze + let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback + let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset + let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount + let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen + let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets + let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications + let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint + let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice + let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint + let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice + let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages + let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation + let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs + let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID + let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID + let txn.LastLog#0: bytes = itxn[txn#0].LastLog + let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK + let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages + let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages + let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) + let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // Bytes has valid prefix + let result#0: bytes = ((extract 2 0) tmp%0#0) + let tmp%3#0: bool = (== result#0 "hey world") + (assert tmp%3#0) + itxn_begin + let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) + let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%2%%Fee_length#0: uint64 = 1u + let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" + let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u + let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u + let inner_txn_params%2%%Sender_length#0: uint64 = 0u + let inner_txn_params%2%%Note_length#0: uint64 = 0u + let inner_txn_params%2%%Receiver_length#0: uint64 = 0u + let inner_txn_params%2%%Amount_length#0: uint64 = 0u + let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%2%%VotePK_length#0: uint64 = 0u + let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%2%%Type_length#0: uint64 = 0u + let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%2%%Accounts_length#0: uint64 = 0u + let inner_txn_params%2%%Assets_length#0: uint64 = 0u + let inner_txn_params%2%%Applications_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L60 + itxn_submit + return + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template_and_custom_prefix() -> void: + block@0: // L69 + let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ApprovalProgramPages, program_page=0, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ApprovalProgramPages, program_page=1, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ClearStateProgramPages, program_page=0, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ClearStateProgramPages, program_page=1, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ExtraProgramPages, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=GlobalNumUint, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=GlobalNumByteSlice, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=LocalNumUint, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=LocalNumByteSlice, program_page=None, PRFX_GREETING="bonjour")) + itxn_begin + let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) + let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%0%%Fee_length#0: uint64 = 1u + let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create()void" + let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 + let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 + let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 + let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 + let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u + let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u + let inner_txn_params%0%%Sender_length#0: uint64 = 0u + let inner_txn_params%0%%Note_length#0: uint64 = 0u + let inner_txn_params%0%%Receiver_length#0: uint64 = 0u + let inner_txn_params%0%%Amount_length#0: uint64 = 0u + let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%0%%VotePK_length#0: uint64 = 0u + let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%0%%Type_length#0: uint64 = 0u + let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u + let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%0%%Accounts_length#0: uint64 = 0u + let inner_txn_params%0%%Assets_length#0: uint64 = 0u + let inner_txn_params%0%%Applications_length#0: uint64 = 0u + ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) + ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L72 + itxn_submit + let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID + itxn_begin + let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) + let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%1%%Fee_length#0: uint64 = 1u + let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u + let length%0#0: uint64 = (len "world") + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 "world") + let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" + let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 + let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%1%%Sender_length#0: uint64 = 0u + let inner_txn_params%1%%Note_length#0: uint64 = 0u + let inner_txn_params%1%%Receiver_length#0: uint64 = 0u + let inner_txn_params%1%%Amount_length#0: uint64 = 0u + let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%1%%VotePK_length#0: uint64 = 0u + let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%1%%Type_length#0: uint64 = 0u + let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%1%%Accounts_length#0: uint64 = 0u + let inner_txn_params%1%%Assets_length#0: uint64 = 0u + let inner_txn_params%1%%Applications_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) + ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L81 + itxn_submit + let txn#0: itxn_group_idx = itxn_group_idx(0) + let txn._is_last#0: bool = 1u + let txn.Sender#0: bytes = itxn[txn#0].Sender + let txn.Fee#0: uint64 = itxn[txn#0].Fee + let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid + let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime + let txn.LastValid#0: uint64 = itxn[txn#0].LastValid + let txn.Note#0: bytes = itxn[txn#0].Note + let txn.Lease#0: bytes = itxn[txn#0].Lease + let txn.Receiver#0: bytes = itxn[txn#0].Receiver + let txn.Amount#0: uint64 = itxn[txn#0].Amount + let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo + let txn.VotePK#0: bytes = itxn[txn#0].VotePK + let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK + let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst + let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast + let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution + let txn.Type#0: bytes = itxn[txn#0].Type + let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum + let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset + let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount + let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender + let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver + let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo + let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex + let txn.TxID#0: bytes = itxn[txn#0].TxID + let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID + let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion + let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs + let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts + let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram + let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram + let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo + let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset + let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal + let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals + let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen + let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName + let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName + let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL + let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash + let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager + let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve + let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze + let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback + let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset + let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount + let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen + let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets + let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications + let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint + let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice + let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint + let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice + let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages + let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation + let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs + let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID + let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID + let txn.LastLog#0: bytes = itxn[txn#0].LastLog + let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK + let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages + let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages + let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) + let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // Bytes has valid prefix + let result#0: bytes = ((extract 2 0) tmp%0#0) + let tmp%3#0: bool = (== result#0 "bonjour world") + (assert tmp%3#0) + itxn_begin + let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) + let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%2%%Fee_length#0: uint64 = 1u + let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 + let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" + let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u + let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u + let inner_txn_params%2%%Sender_length#0: uint64 = 0u + let inner_txn_params%2%%Note_length#0: uint64 = 0u + let inner_txn_params%2%%Receiver_length#0: uint64 = 0u + let inner_txn_params%2%%Amount_length#0: uint64 = 0u + let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%2%%VotePK_length#0: uint64 = 0u + let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%2%%Type_length#0: uint64 = 0u + let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%2%%Accounts_length#0: uint64 = 0u + let inner_txn_params%2%%Assets_length#0: uint64 = 0u + let inner_txn_params%2%%Applications_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L91 + itxn_submit + return + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_large() -> void: + block@0: // L100 + let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ApprovalProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ApprovalProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ClearStateProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ClearStateProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ExtraProgramPages, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=GlobalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=GlobalNumByteSlice, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=LocalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=LocalNumByteSlice, program_page=None)) + itxn_begin + let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) + let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%0%%Fee_length#0: uint64 = 1u + let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 + let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 + let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 + let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 + let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u + let inner_txn_params%0%%param_ExtraProgramPages_idx_0#0: uint64 = compiled.extraProgramPages#0 + let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 1u + let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = compiled.globalBytes#0 + let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u + let inner_txn_params%0%%Sender_length#0: uint64 = 0u + let inner_txn_params%0%%Note_length#0: uint64 = 0u + let inner_txn_params%0%%Receiver_length#0: uint64 = 0u + let inner_txn_params%0%%Amount_length#0: uint64 = 0u + let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%0%%VotePK_length#0: uint64 = 0u + let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%0%%Type_length#0: uint64 = 0u + let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u + let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 0u + let inner_txn_params%0%%Accounts_length#0: uint64 = 0u + let inner_txn_params%0%%Assets_length#0: uint64 = 0u + let inner_txn_params%0%%Applications_length#0: uint64 = 0u + ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) + ((itxn_field ExtraProgramPages) inner_txn_params%0%%param_ExtraProgramPages_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) + ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) + ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) + ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) + goto block@1 + block@1: // next_txn_L103 + itxn_submit + let largeApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID + itxn_begin + let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) + let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%1%%Fee_length#0: uint64 = 1u + let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "getBigBytesLength()uint64" + let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = largeApp#0 + let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%1%%Sender_length#0: uint64 = 0u + let inner_txn_params%1%%Note_length#0: uint64 = 0u + let inner_txn_params%1%%Receiver_length#0: uint64 = 0u + let inner_txn_params%1%%Amount_length#0: uint64 = 0u + let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%1%%VotePK_length#0: uint64 = 0u + let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%1%%Type_length#0: uint64 = 0u + let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%1%%Accounts_length#0: uint64 = 0u + let inner_txn_params%1%%Assets_length#0: uint64 = 0u + let inner_txn_params%1%%Applications_length#0: uint64 = 0u + let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) + goto block@2 + block@2: // next_txn_L112 + itxn_submit + let txn#0: itxn_group_idx = itxn_group_idx(0) + let txn._is_last#0: bool = 1u + let txn.Sender#0: bytes = itxn[txn#0].Sender + let txn.Fee#0: uint64 = itxn[txn#0].Fee + let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid + let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime + let txn.LastValid#0: uint64 = itxn[txn#0].LastValid + let txn.Note#0: bytes = itxn[txn#0].Note + let txn.Lease#0: bytes = itxn[txn#0].Lease + let txn.Receiver#0: bytes = itxn[txn#0].Receiver + let txn.Amount#0: uint64 = itxn[txn#0].Amount + let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo + let txn.VotePK#0: bytes = itxn[txn#0].VotePK + let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK + let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst + let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast + let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution + let txn.Type#0: bytes = itxn[txn#0].Type + let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum + let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset + let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount + let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender + let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver + let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo + let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex + let txn.TxID#0: bytes = itxn[txn#0].TxID + let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID + let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion + let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs + let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts + let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram + let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram + let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo + let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset + let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal + let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals + let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen + let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName + let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName + let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL + let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash + let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager + let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve + let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze + let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback + let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset + let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount + let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen + let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets + let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications + let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint + let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice + let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint + let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice + let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages + let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation + let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs + let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID + let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID + let txn.LastLog#0: bytes = itxn[txn#0].LastLog + let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK + let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages + let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages + let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) + let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) + let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) + (assert tmp%2#0) // Bytes has valid prefix + let result#0: uint64 = (btoi tmp%0#0) + let tmp%3#0: bool = (== result#0 4096u) + (assert tmp%3#0) + itxn_begin + let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) + let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u + let inner_txn_params%2%%Fee_length#0: uint64 = 1u + let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u + let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = largeApp#0 + let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u + let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" + let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u + let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u + let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u + let inner_txn_params%2%%Sender_length#0: uint64 = 0u + let inner_txn_params%2%%Note_length#0: uint64 = 0u + let inner_txn_params%2%%Receiver_length#0: uint64 = 0u + let inner_txn_params%2%%Amount_length#0: uint64 = 0u + let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u + let inner_txn_params%2%%VotePK_length#0: uint64 = 0u + let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u + let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u + let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u + let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u + let inner_txn_params%2%%Type_length#0: uint64 = 0u + let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u + let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u + let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u + let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u + let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u + let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u + let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u + let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u + let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u + let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u + let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u + let inner_txn_params%2%%Accounts_length#0: uint64 = 0u + let inner_txn_params%2%%Assets_length#0: uint64 = 0u + let inner_txn_params%2%%Applications_length#0: uint64 = 0u + let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u + let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u + ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) + ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) + ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) + ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) + ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) + goto block@3 + block@3: // next_txn_L122 + itxn_submit + return + +subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.__algots__.defaultCreate() -> void: + block@0: // L6 + return \ No newline at end of file diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.clear.0.ssa.ir b/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/precompiled-factory/HelloFactory.ir/HelloFactory.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/precompiled-factory/HelloFactory.ssa.ir b/tests/approvals/out/precompiled-factory/HelloFactory.ssa.ir deleted file mode 100644 index 61ee1fdd..00000000 --- a/tests/approvals/out/precompiled-factory/HelloFactory.ssa.ir +++ /dev/null @@ -1,1215 +0,0 @@ -contract tests/approvals/precompiled-factory.algo.ts::HelloFactory: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.__puya_arc4_router__() -> bool: - block@0: // L6 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@8 - block@1: // abi_routing_L6 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "test_compile_contract()void" => block@2, method "test_compile_contract_with_template()void" => block@3, method "test_compile_contract_with_template_and_custom_prefix()void" => block@4, method "test_compile_contract_large()void" => block@5, * => block@6} - block@2: // test_compile_contract_route_L7 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract() - return 1u - block@3: // test_compile_contract_with_template_route_L38 - let tmp%7#0: uint64 = (txn OnCompletion) - let tmp%8#0: bool = (== tmp%7#0 NoOp) - (assert tmp%8#0) // OnCompletion is not NoOp - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (!= tmp%9#0 0u) - (assert tmp%10#0) // can only call when not creating - tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template() - return 1u - block@4: // test_compile_contract_with_template_and_custom_prefix_route_L69 - let tmp%11#0: uint64 = (txn OnCompletion) - let tmp%12#0: bool = (== tmp%11#0 NoOp) - (assert tmp%12#0) // OnCompletion is not NoOp - let tmp%13#0: uint64 = (txn ApplicationID) - let tmp%14#0: bool = (!= tmp%13#0 0u) - (assert tmp%14#0) // can only call when not creating - tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template_and_custom_prefix() - return 1u - block@5: // test_compile_contract_large_route_L100 - let tmp%15#0: uint64 = (txn OnCompletion) - let tmp%16#0: bool = (== tmp%15#0 NoOp) - (assert tmp%16#0) // OnCompletion is not NoOp - let tmp%17#0: uint64 = (txn ApplicationID) - let tmp%18#0: bool = (!= tmp%17#0 0u) - (assert tmp%18#0) // can only call when not creating - tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_large() - return 1u - block@6: // switch_case_default_L6 - goto block@7 - block@7: // switch_case_next_L6 - goto block@12 - block@8: // bare_routing_L6 - let tmp%19#0: uint64 = (txn OnCompletion) - switch tmp%19#0 {0u => block@9, * => block@10} - block@9: // __algots__.defaultCreate_L6 - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (== tmp%20#0 0u) - (assert tmp%21#0) // can only call when creating - tests/approvals/precompiled-factory.algo.ts::HelloFactory.__algots__.defaultCreate() - return 1u - block@10: // switch_case_default_L6 - goto block@11 - block@11: // switch_case_next_L6 - goto block@12 - block@12: // after_if_else_L6 - return 0u - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract() -> void: - block@0: // L7 - let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ApprovalProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ApprovalProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ClearStateProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ClearStateProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=ExtraProgramPages, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=GlobalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=GlobalNumByteSlice, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=LocalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::Hello', field=LocalNumByteSlice, program_page=None)) - itxn_begin - let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) - let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%0%%Fee_length#0: uint64 = 1u - let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u - let length%0#0: uint64 = (len "hello") - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 "hello") - let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create(string)void" - let inner_txn_params%0%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 - let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 2u - let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 - let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 - let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 - let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 - let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u - let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u - let inner_txn_params%0%%Sender_length#0: uint64 = 0u - let inner_txn_params%0%%Note_length#0: uint64 = 0u - let inner_txn_params%0%%Receiver_length#0: uint64 = 0u - let inner_txn_params%0%%Amount_length#0: uint64 = 0u - let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%0%%VotePK_length#0: uint64 = 0u - let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%0%%Type_length#0: uint64 = 0u - let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u - let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%0%%Accounts_length#0: uint64 = 0u - let inner_txn_params%0%%Assets_length#0: uint64 = 0u - let inner_txn_params%0%%Applications_length#0: uint64 = 0u - ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) - ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_1#0) - ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) - goto block@1 - block@1: // next_txn_L10 - itxn_submit - let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID - itxn_begin - let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) - let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%1%%Fee_length#0: uint64 = 1u - let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u - let length%1#0: uint64 = (len "world") - let as_bytes%1#0: bytes = (itob length%1#0) - let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 "world") - let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" - let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%1#0 - let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u - let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%1%%Sender_length#0: uint64 = 0u - let inner_txn_params%1%%Note_length#0: uint64 = 0u - let inner_txn_params%1%%Receiver_length#0: uint64 = 0u - let inner_txn_params%1%%Amount_length#0: uint64 = 0u - let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%1%%VotePK_length#0: uint64 = 0u - let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%1%%Type_length#0: uint64 = 0u - let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%1%%Accounts_length#0: uint64 = 0u - let inner_txn_params%1%%Assets_length#0: uint64 = 0u - let inner_txn_params%1%%Applications_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) - ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) - goto block@2 - block@2: // next_txn_L19 - itxn_submit - let txn#0: itxn_group_idx = itxn_group_idx(0) - let txn._is_last#0: bool = 1u - let txn.Sender#0: bytes = itxn[txn#0].Sender - let txn.Fee#0: uint64 = itxn[txn#0].Fee - let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid - let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime - let txn.LastValid#0: uint64 = itxn[txn#0].LastValid - let txn.Note#0: bytes = itxn[txn#0].Note - let txn.Lease#0: bytes = itxn[txn#0].Lease - let txn.Receiver#0: bytes = itxn[txn#0].Receiver - let txn.Amount#0: uint64 = itxn[txn#0].Amount - let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo - let txn.VotePK#0: bytes = itxn[txn#0].VotePK - let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK - let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst - let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast - let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution - let txn.Type#0: bytes = itxn[txn#0].Type - let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum - let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset - let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount - let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender - let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver - let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo - let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex - let txn.TxID#0: bytes = itxn[txn#0].TxID - let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID - let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion - let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs - let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts - let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram - let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram - let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo - let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset - let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal - let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals - let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen - let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName - let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName - let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL - let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash - let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager - let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve - let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze - let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback - let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset - let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount - let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen - let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets - let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications - let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint - let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice - let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint - let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice - let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages - let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation - let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs - let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID - let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID - let txn.LastLog#0: bytes = itxn[txn#0].LastLog - let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK - let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages - let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages - let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) - let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) - let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) - (assert tmp%2#0) // Bytes has valid prefix - let result#0: bytes = ((extract 2 0) tmp%0#0) - let tmp%3#0: bool = (== result#0 "hello world") - (assert tmp%3#0) - itxn_begin - let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) - let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%2%%Fee_length#0: uint64 = 1u - let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" - let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u - let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u - let inner_txn_params%2%%Sender_length#0: uint64 = 0u - let inner_txn_params%2%%Note_length#0: uint64 = 0u - let inner_txn_params%2%%Receiver_length#0: uint64 = 0u - let inner_txn_params%2%%Amount_length#0: uint64 = 0u - let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%2%%VotePK_length#0: uint64 = 0u - let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%2%%Type_length#0: uint64 = 0u - let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%2%%Accounts_length#0: uint64 = 0u - let inner_txn_params%2%%Assets_length#0: uint64 = 0u - let inner_txn_params%2%%Applications_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) - goto block@3 - block@3: // next_txn_L29 - itxn_submit - return - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template() -> void: - block@0: // L38 - let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ApprovalProgramPages, program_page=0, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ApprovalProgramPages, program_page=1, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ClearStateProgramPages, program_page=0, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ClearStateProgramPages, program_page=1, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=ExtraProgramPages, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=GlobalNumUint, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=GlobalNumByteSlice, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=LocalNumUint, program_page=None, TMPL_GREETING="hey"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplate', field=LocalNumByteSlice, program_page=None, TMPL_GREETING="hey")) - itxn_begin - let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) - let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%0%%Fee_length#0: uint64 = 1u - let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create()void" - let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 - let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 - let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 - let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 - let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u - let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u - let inner_txn_params%0%%Sender_length#0: uint64 = 0u - let inner_txn_params%0%%Note_length#0: uint64 = 0u - let inner_txn_params%0%%Receiver_length#0: uint64 = 0u - let inner_txn_params%0%%Amount_length#0: uint64 = 0u - let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%0%%VotePK_length#0: uint64 = 0u - let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%0%%Type_length#0: uint64 = 0u - let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u - let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%0%%Accounts_length#0: uint64 = 0u - let inner_txn_params%0%%Assets_length#0: uint64 = 0u - let inner_txn_params%0%%Applications_length#0: uint64 = 0u - ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) - ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) - goto block@1 - block@1: // next_txn_L41 - itxn_submit - let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID - itxn_begin - let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) - let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%1%%Fee_length#0: uint64 = 1u - let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u - let length%0#0: uint64 = (len "world") - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 "world") - let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" - let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 - let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u - let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%1%%Sender_length#0: uint64 = 0u - let inner_txn_params%1%%Note_length#0: uint64 = 0u - let inner_txn_params%1%%Receiver_length#0: uint64 = 0u - let inner_txn_params%1%%Amount_length#0: uint64 = 0u - let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%1%%VotePK_length#0: uint64 = 0u - let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%1%%Type_length#0: uint64 = 0u - let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%1%%Accounts_length#0: uint64 = 0u - let inner_txn_params%1%%Assets_length#0: uint64 = 0u - let inner_txn_params%1%%Applications_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) - ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) - goto block@2 - block@2: // next_txn_L50 - itxn_submit - let txn#0: itxn_group_idx = itxn_group_idx(0) - let txn._is_last#0: bool = 1u - let txn.Sender#0: bytes = itxn[txn#0].Sender - let txn.Fee#0: uint64 = itxn[txn#0].Fee - let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid - let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime - let txn.LastValid#0: uint64 = itxn[txn#0].LastValid - let txn.Note#0: bytes = itxn[txn#0].Note - let txn.Lease#0: bytes = itxn[txn#0].Lease - let txn.Receiver#0: bytes = itxn[txn#0].Receiver - let txn.Amount#0: uint64 = itxn[txn#0].Amount - let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo - let txn.VotePK#0: bytes = itxn[txn#0].VotePK - let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK - let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst - let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast - let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution - let txn.Type#0: bytes = itxn[txn#0].Type - let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum - let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset - let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount - let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender - let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver - let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo - let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex - let txn.TxID#0: bytes = itxn[txn#0].TxID - let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID - let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion - let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs - let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts - let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram - let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram - let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo - let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset - let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal - let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals - let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen - let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName - let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName - let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL - let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash - let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager - let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve - let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze - let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback - let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset - let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount - let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen - let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets - let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications - let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint - let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice - let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint - let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice - let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages - let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation - let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs - let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID - let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID - let txn.LastLog#0: bytes = itxn[txn#0].LastLog - let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK - let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages - let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages - let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) - let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) - let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) - (assert tmp%2#0) // Bytes has valid prefix - let result#0: bytes = ((extract 2 0) tmp%0#0) - let tmp%3#0: bool = (== result#0 "hey world") - (assert tmp%3#0) - itxn_begin - let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) - let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%2%%Fee_length#0: uint64 = 1u - let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" - let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u - let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u - let inner_txn_params%2%%Sender_length#0: uint64 = 0u - let inner_txn_params%2%%Note_length#0: uint64 = 0u - let inner_txn_params%2%%Receiver_length#0: uint64 = 0u - let inner_txn_params%2%%Amount_length#0: uint64 = 0u - let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%2%%VotePK_length#0: uint64 = 0u - let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%2%%Type_length#0: uint64 = 0u - let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%2%%Accounts_length#0: uint64 = 0u - let inner_txn_params%2%%Assets_length#0: uint64 = 0u - let inner_txn_params%2%%Applications_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) - goto block@3 - block@3: // next_txn_L60 - itxn_submit - return - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_with_template_and_custom_prefix() -> void: - block@0: // L69 - let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ApprovalProgramPages, program_page=0, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ApprovalProgramPages, program_page=1, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ClearStateProgramPages, program_page=0, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ClearStateProgramPages, program_page=1, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=ExtraProgramPages, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=GlobalNumUint, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=GlobalNumByteSlice, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=LocalNumUint, program_page=None, PRFX_GREETING="bonjour"), compiled_contract('tests/approvals/precompiled-apps.algo.ts::HelloTemplateCustomPrefix', field=LocalNumByteSlice, program_page=None, PRFX_GREETING="bonjour")) - itxn_begin - let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) - let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%0%%Fee_length#0: uint64 = 1u - let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%0%%param_ApplicationArgs_idx_0#0: bytes = method "create()void" - let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 - let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 - let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 - let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 - let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = 1u - let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u - let inner_txn_params%0%%Sender_length#0: uint64 = 0u - let inner_txn_params%0%%Note_length#0: uint64 = 0u - let inner_txn_params%0%%Receiver_length#0: uint64 = 0u - let inner_txn_params%0%%Amount_length#0: uint64 = 0u - let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%0%%VotePK_length#0: uint64 = 0u - let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%0%%Type_length#0: uint64 = 0u - let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u - let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%0%%Accounts_length#0: uint64 = 0u - let inner_txn_params%0%%Assets_length#0: uint64 = 0u - let inner_txn_params%0%%Applications_length#0: uint64 = 0u - ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) - ((itxn_field ApplicationArgs) inner_txn_params%0%%param_ApplicationArgs_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) - goto block@1 - block@1: // next_txn_L72 - itxn_submit - let helloApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID - itxn_begin - let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) - let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%1%%Fee_length#0: uint64 = 1u - let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u - let length%0#0: uint64 = (len "world") - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 "world") - let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "greet(string)string" - let inner_txn_params%1%%param_ApplicationArgs_idx_1#0: bytes = encoded_value%0#0 - let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 2u - let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%1%%Sender_length#0: uint64 = 0u - let inner_txn_params%1%%Note_length#0: uint64 = 0u - let inner_txn_params%1%%Receiver_length#0: uint64 = 0u - let inner_txn_params%1%%Amount_length#0: uint64 = 0u - let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%1%%VotePK_length#0: uint64 = 0u - let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%1%%Type_length#0: uint64 = 0u - let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%1%%Accounts_length#0: uint64 = 0u - let inner_txn_params%1%%Assets_length#0: uint64 = 0u - let inner_txn_params%1%%Applications_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_1#0) - ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) - goto block@2 - block@2: // next_txn_L81 - itxn_submit - let txn#0: itxn_group_idx = itxn_group_idx(0) - let txn._is_last#0: bool = 1u - let txn.Sender#0: bytes = itxn[txn#0].Sender - let txn.Fee#0: uint64 = itxn[txn#0].Fee - let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid - let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime - let txn.LastValid#0: uint64 = itxn[txn#0].LastValid - let txn.Note#0: bytes = itxn[txn#0].Note - let txn.Lease#0: bytes = itxn[txn#0].Lease - let txn.Receiver#0: bytes = itxn[txn#0].Receiver - let txn.Amount#0: uint64 = itxn[txn#0].Amount - let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo - let txn.VotePK#0: bytes = itxn[txn#0].VotePK - let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK - let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst - let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast - let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution - let txn.Type#0: bytes = itxn[txn#0].Type - let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum - let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset - let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount - let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender - let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver - let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo - let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex - let txn.TxID#0: bytes = itxn[txn#0].TxID - let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID - let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion - let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs - let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts - let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram - let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram - let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo - let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset - let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal - let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals - let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen - let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName - let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName - let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL - let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash - let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager - let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve - let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze - let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback - let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset - let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount - let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen - let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets - let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications - let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint - let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice - let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint - let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice - let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages - let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation - let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs - let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID - let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID - let txn.LastLog#0: bytes = itxn[txn#0].LastLog - let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK - let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages - let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages - let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) - let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) - let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) - (assert tmp%2#0) // Bytes has valid prefix - let result#0: bytes = ((extract 2 0) tmp%0#0) - let tmp%3#0: bool = (== result#0 "bonjour world") - (assert tmp%3#0) - itxn_begin - let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) - let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%2%%Fee_length#0: uint64 = 1u - let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = helloApp#0 - let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" - let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u - let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u - let inner_txn_params%2%%Sender_length#0: uint64 = 0u - let inner_txn_params%2%%Note_length#0: uint64 = 0u - let inner_txn_params%2%%Receiver_length#0: uint64 = 0u - let inner_txn_params%2%%Amount_length#0: uint64 = 0u - let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%2%%VotePK_length#0: uint64 = 0u - let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%2%%Type_length#0: uint64 = 0u - let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%2%%Accounts_length#0: uint64 = 0u - let inner_txn_params%2%%Assets_length#0: uint64 = 0u - let inner_txn_params%2%%Applications_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) - goto block@3 - block@3: // next_txn_L91 - itxn_submit - return - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.test_compile_contract_large() -> void: - block@0: // L100 - let (compiled.approvalProgram.0#0: bytes, compiled.approvalProgram.1#0: bytes, compiled.clearStateProgram.0#0: bytes, compiled.clearStateProgram.1#0: bytes, compiled.extraProgramPages#0: uint64, compiled.globalUints#0: uint64, compiled.globalBytes#0: uint64, compiled.localUints#0: uint64, compiled.localBytes#0: uint64) = (compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ApprovalProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ApprovalProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ClearStateProgramPages, program_page=0), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ClearStateProgramPages, program_page=1), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=ExtraProgramPages, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=GlobalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=GlobalNumByteSlice, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=LocalNumUint, program_page=None), compiled_contract('tests/approvals/precompiled-apps.algo.ts::LargeProgram', field=LocalNumByteSlice, program_page=None)) - itxn_begin - let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) - let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%0%%Fee_length#0: uint64 = 1u - let inner_txn_params%0%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%0%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0: bytes = compiled.approvalProgram.0#0 - let inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0: bytes = compiled.approvalProgram.1#0 - let inner_txn_params%0%%ApprovalProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0: bytes = compiled.clearStateProgram.0#0 - let inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0: bytes = compiled.clearStateProgram.1#0 - let inner_txn_params%0%%ClearStateProgramPages_length#0: uint64 = 2u - let inner_txn_params%0%%param_ExtraProgramPages_idx_0#0: uint64 = compiled.extraProgramPages#0 - let inner_txn_params%0%%ExtraProgramPages_length#0: uint64 = 1u - let inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0: uint64 = compiled.globalBytes#0 - let inner_txn_params%0%%GlobalNumByteSlice_length#0: uint64 = 1u - let inner_txn_params%0%%Sender_length#0: uint64 = 0u - let inner_txn_params%0%%Note_length#0: uint64 = 0u - let inner_txn_params%0%%Receiver_length#0: uint64 = 0u - let inner_txn_params%0%%Amount_length#0: uint64 = 0u - let inner_txn_params%0%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%0%%VotePK_length#0: uint64 = 0u - let inner_txn_params%0%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%0%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%0%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%0%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%0%%Type_length#0: uint64 = 0u - let inner_txn_params%0%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%0%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%0%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%0%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%0%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%0%%ApplicationID_length#0: uint64 = 0u - let inner_txn_params%0%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%0%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%0%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%0%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%0%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%0%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%0%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%0%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%0%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%0%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%0%%ApplicationArgs_length#0: uint64 = 0u - let inner_txn_params%0%%Accounts_length#0: uint64 = 0u - let inner_txn_params%0%%Assets_length#0: uint64 = 0u - let inner_txn_params%0%%Applications_length#0: uint64 = 0u - ((itxn_field GlobalNumByteSlice) inner_txn_params%0%%param_GlobalNumByteSlice_idx_0#0) - ((itxn_field ExtraProgramPages) inner_txn_params%0%%param_ExtraProgramPages_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_0#0) - ((itxn_field ClearStateProgramPages) inner_txn_params%0%%param_ClearStateProgramPages_idx_1#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_0#0) - ((itxn_field ApprovalProgramPages) inner_txn_params%0%%param_ApprovalProgramPages_idx_1#0) - ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) - goto block@1 - block@1: // next_txn_L103 - itxn_submit - let largeApp#0: uint64 = itxn[itxn_group_idx(0)].CreatedApplicationID - itxn_begin - let inner_txn_params%1#0: itxn_field_set = itxn_field_set(1) - let inner_txn_params%1%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%1%%Fee_length#0: uint64 = 1u - let inner_txn_params%1%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%1%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%1%%param_ApplicationArgs_idx_0#0: bytes = method "getBigBytesLength()uint64" - let inner_txn_params%1%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%1%%param_ApplicationID_idx_0#0: uint64 = largeApp#0 - let inner_txn_params%1%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%1%%Sender_length#0: uint64 = 0u - let inner_txn_params%1%%Note_length#0: uint64 = 0u - let inner_txn_params%1%%Receiver_length#0: uint64 = 0u - let inner_txn_params%1%%Amount_length#0: uint64 = 0u - let inner_txn_params%1%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%1%%VotePK_length#0: uint64 = 0u - let inner_txn_params%1%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%1%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%1%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%1%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%1%%Type_length#0: uint64 = 0u - let inner_txn_params%1%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%1%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%1%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%1%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%1%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%1%%OnCompletion_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%1%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%1%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%1%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%1%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%1%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%1%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%1%%Accounts_length#0: uint64 = 0u - let inner_txn_params%1%%Assets_length#0: uint64 = 0u - let inner_txn_params%1%%Applications_length#0: uint64 = 0u - let inner_txn_params%1%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%1%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field ApplicationID) inner_txn_params%1%%param_ApplicationID_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%1%%param_ApplicationArgs_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) - goto block@2 - block@2: // next_txn_L112 - itxn_submit - let txn#0: itxn_group_idx = itxn_group_idx(0) - let txn._is_last#0: bool = 1u - let txn.Sender#0: bytes = itxn[txn#0].Sender - let txn.Fee#0: uint64 = itxn[txn#0].Fee - let txn.FirstValid#0: uint64 = itxn[txn#0].FirstValid - let txn.FirstValidTime#0: uint64 = itxn[txn#0].FirstValidTime - let txn.LastValid#0: uint64 = itxn[txn#0].LastValid - let txn.Note#0: bytes = itxn[txn#0].Note - let txn.Lease#0: bytes = itxn[txn#0].Lease - let txn.Receiver#0: bytes = itxn[txn#0].Receiver - let txn.Amount#0: uint64 = itxn[txn#0].Amount - let txn.CloseRemainderTo#0: bytes = itxn[txn#0].CloseRemainderTo - let txn.VotePK#0: bytes = itxn[txn#0].VotePK - let txn.SelectionPK#0: bytes = itxn[txn#0].SelectionPK - let txn.VoteFirst#0: uint64 = itxn[txn#0].VoteFirst - let txn.VoteLast#0: uint64 = itxn[txn#0].VoteLast - let txn.VoteKeyDilution#0: uint64 = itxn[txn#0].VoteKeyDilution - let txn.Type#0: bytes = itxn[txn#0].Type - let txn.TypeEnum#0: uint64 = itxn[txn#0].TypeEnum - let txn.XferAsset#0: uint64 = itxn[txn#0].XferAsset - let txn.AssetAmount#0: uint64 = itxn[txn#0].AssetAmount - let txn.AssetSender#0: bytes = itxn[txn#0].AssetSender - let txn.AssetReceiver#0: bytes = itxn[txn#0].AssetReceiver - let txn.AssetCloseTo#0: bytes = itxn[txn#0].AssetCloseTo - let txn.GroupIndex#0: uint64 = itxn[txn#0].GroupIndex - let txn.TxID#0: bytes = itxn[txn#0].TxID - let txn.ApplicationID#0: uint64 = itxn[txn#0].ApplicationID - let txn.OnCompletion#0: uint64 = itxn[txn#0].OnCompletion - let txn.NumAppArgs#0: uint64 = itxn[txn#0].NumAppArgs - let txn.NumAccounts#0: uint64 = itxn[txn#0].NumAccounts - let txn.ApprovalProgram#0: bytes = itxn[txn#0].ApprovalProgram - let txn.ClearStateProgram#0: bytes = itxn[txn#0].ClearStateProgram - let txn.RekeyTo#0: bytes = itxn[txn#0].RekeyTo - let txn.ConfigAsset#0: uint64 = itxn[txn#0].ConfigAsset - let txn.ConfigAssetTotal#0: uint64 = itxn[txn#0].ConfigAssetTotal - let txn.ConfigAssetDecimals#0: uint64 = itxn[txn#0].ConfigAssetDecimals - let txn.ConfigAssetDefaultFrozen#0: bool = itxn[txn#0].ConfigAssetDefaultFrozen - let txn.ConfigAssetUnitName#0: bytes = itxn[txn#0].ConfigAssetUnitName - let txn.ConfigAssetName#0: bytes = itxn[txn#0].ConfigAssetName - let txn.ConfigAssetURL#0: bytes = itxn[txn#0].ConfigAssetURL - let txn.ConfigAssetMetadataHash#0: bytes = itxn[txn#0].ConfigAssetMetadataHash - let txn.ConfigAssetManager#0: bytes = itxn[txn#0].ConfigAssetManager - let txn.ConfigAssetReserve#0: bytes = itxn[txn#0].ConfigAssetReserve - let txn.ConfigAssetFreeze#0: bytes = itxn[txn#0].ConfigAssetFreeze - let txn.ConfigAssetClawback#0: bytes = itxn[txn#0].ConfigAssetClawback - let txn.FreezeAsset#0: uint64 = itxn[txn#0].FreezeAsset - let txn.FreezeAssetAccount#0: bytes = itxn[txn#0].FreezeAssetAccount - let txn.FreezeAssetFrozen#0: bool = itxn[txn#0].FreezeAssetFrozen - let txn.NumAssets#0: uint64 = itxn[txn#0].NumAssets - let txn.NumApplications#0: uint64 = itxn[txn#0].NumApplications - let txn.GlobalNumUint#0: uint64 = itxn[txn#0].GlobalNumUint - let txn.GlobalNumByteSlice#0: uint64 = itxn[txn#0].GlobalNumByteSlice - let txn.LocalNumUint#0: uint64 = itxn[txn#0].LocalNumUint - let txn.LocalNumByteSlice#0: uint64 = itxn[txn#0].LocalNumByteSlice - let txn.ExtraProgramPages#0: uint64 = itxn[txn#0].ExtraProgramPages - let txn.Nonparticipation#0: bool = itxn[txn#0].Nonparticipation - let txn.NumLogs#0: uint64 = itxn[txn#0].NumLogs - let txn.CreatedAssetID#0: uint64 = itxn[txn#0].CreatedAssetID - let txn.CreatedApplicationID#0: uint64 = itxn[txn#0].CreatedApplicationID - let txn.LastLog#0: bytes = itxn[txn#0].LastLog - let txn.StateProofPK#0: bytes = itxn[txn#0].StateProofPK - let txn.NumApprovalProgramPages#0: uint64 = itxn[txn#0].NumApprovalProgramPages - let txn.NumClearStateProgramPages#0: uint64 = itxn[txn#0].NumClearStateProgramPages - let tmp%0#0: bytes = ((extract 4 0) txn.LastLog#0) - let tmp%1#0: bytes = ((extract 0 4) txn.LastLog#0) - let tmp%2#0: bool = (== tmp%1#0 0x151f7c75) - (assert tmp%2#0) // Bytes has valid prefix - let result#0: uint64 = (btoi tmp%0#0) - let tmp%3#0: bool = (== result#0 4096u) - (assert tmp%3#0) - itxn_begin - let inner_txn_params%2#0: itxn_field_set = itxn_field_set(2) - let inner_txn_params%2%%param_Fee_idx_0#0: uint64 = 0u - let inner_txn_params%2%%Fee_length#0: uint64 = 1u - let inner_txn_params%2%%param_TypeEnum_idx_0#0: uint64 = 6u - let inner_txn_params%2%%TypeEnum_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationID_idx_0#0: uint64 = largeApp#0 - let inner_txn_params%2%%ApplicationID_length#0: uint64 = 1u - let inner_txn_params%2%%param_ApplicationArgs_idx_0#0: bytes = method "delete()void" - let inner_txn_params%2%%ApplicationArgs_length#0: uint64 = 1u - let inner_txn_params%2%%param_OnCompletion_idx_0#0: uint64 = 5u - let inner_txn_params%2%%OnCompletion_length#0: uint64 = 1u - let inner_txn_params%2%%Sender_length#0: uint64 = 0u - let inner_txn_params%2%%Note_length#0: uint64 = 0u - let inner_txn_params%2%%Receiver_length#0: uint64 = 0u - let inner_txn_params%2%%Amount_length#0: uint64 = 0u - let inner_txn_params%2%%CloseRemainderTo_length#0: uint64 = 0u - let inner_txn_params%2%%VotePK_length#0: uint64 = 0u - let inner_txn_params%2%%SelectionPK_length#0: uint64 = 0u - let inner_txn_params%2%%VoteFirst_length#0: uint64 = 0u - let inner_txn_params%2%%VoteLast_length#0: uint64 = 0u - let inner_txn_params%2%%VoteKeyDilution_length#0: uint64 = 0u - let inner_txn_params%2%%Type_length#0: uint64 = 0u - let inner_txn_params%2%%XferAsset_length#0: uint64 = 0u - let inner_txn_params%2%%AssetAmount_length#0: uint64 = 0u - let inner_txn_params%2%%AssetSender_length#0: uint64 = 0u - let inner_txn_params%2%%AssetReceiver_length#0: uint64 = 0u - let inner_txn_params%2%%AssetCloseTo_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgram_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgram_length#0: uint64 = 0u - let inner_txn_params%2%%RekeyTo_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAsset_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetTotal_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDecimals_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetDefaultFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetUnitName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetName_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetURL_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetMetadataHash_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetManager_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetReserve_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetFreeze_length#0: uint64 = 0u - let inner_txn_params%2%%ConfigAssetClawback_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAsset_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetAccount_length#0: uint64 = 0u - let inner_txn_params%2%%FreezeAssetFrozen_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%GlobalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumUint_length#0: uint64 = 0u - let inner_txn_params%2%%LocalNumByteSlice_length#0: uint64 = 0u - let inner_txn_params%2%%ExtraProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%Nonparticipation_length#0: uint64 = 0u - let inner_txn_params%2%%StateProofPK_length#0: uint64 = 0u - let inner_txn_params%2%%Accounts_length#0: uint64 = 0u - let inner_txn_params%2%%Assets_length#0: uint64 = 0u - let inner_txn_params%2%%Applications_length#0: uint64 = 0u - let inner_txn_params%2%%ApprovalProgramPages_length#0: uint64 = 0u - let inner_txn_params%2%%ClearStateProgramPages_length#0: uint64 = 0u - ((itxn_field OnCompletion) inner_txn_params%2%%param_OnCompletion_idx_0#0) - ((itxn_field ApplicationArgs) inner_txn_params%2%%param_ApplicationArgs_idx_0#0) - ((itxn_field ApplicationID) inner_txn_params%2%%param_ApplicationID_idx_0#0) - ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) - ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) - goto block@3 - block@3: // next_txn_L122 - itxn_submit - return - - subroutine tests/approvals/precompiled-factory.algo.ts::HelloFactory.__algots__.defaultCreate() -> void: - block@0: // L6 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.approval.teal b/tests/approvals/out/prefix-postfix-operators/DemoContract.approval.teal index 8154376f..673032d6 100644 --- a/tests/approvals/out/prefix-postfix-operators/DemoContract.approval.teal +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.approval.teal @@ -1,28 +1,40 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 10 5 bytecblock 0x0a 0x01 0x05 - callsub __puya_arc4_router__ - return - -// tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/prefix-postfix-operators.algo.ts:57 // export class DemoContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@6 + +main_abi_routing@2: + // tests/approvals/prefix-postfix-operators.algo.ts:57 + // export class DemoContract extends Contract { txna ApplicationArgs 0 pushbytes 0xf59e3cc4 // method "test()bool" swap - match __puya_arc4_router___test_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_test_route@3 + +main_switch_case_default@4: -__puya_arc4_router___test_route@2: +main_switch_case_next@5: + +main_after_if_else@10: + // tests/approvals/prefix-postfix-operators.algo.ts:57 + // export class DemoContract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__@11: + return + +main_test_route@3: // tests/approvals/prefix-postfix-operators.algo.ts:58 // test() { txn OnCompletion @@ -43,21 +55,22 @@ __puya_arc4_router___test_route@2: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__@11 -__puya_arc4_router___bare_routing@5: +main_bare_routing@6: // tests/approvals/prefix-postfix-operators.algo.ts:57 // export class DemoContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@7 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@8: + +main_switch_case_next@9: + b main_after_if_else@10 + +main___algots__.defaultCreate@7: // tests/approvals/prefix-postfix-operators.algo.ts:57 // export class DemoContract extends Contract { txn ApplicationID @@ -66,15 +79,7 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@7: - -__puya_arc4_router___after_if_else@9: - // tests/approvals/prefix-postfix-operators.algo.ts:57 - // export class DemoContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__@11 // tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.test() -> uint64: diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.arc32.json b/tests/approvals/out/prefix-postfix-operators/DemoContract.arc32.json index f1deec22..70952f24 100644 --- a/tests/approvals/out/prefix-postfix-operators/DemoContract.arc32.json +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDEwIDUKICAgIGJ5dGVjYmxvY2sgMHgwYSAweDAxIDB4MDUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1OAogICAgLy8gdGVzdCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1OAogICAgLy8gdGVzdCgpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU5CiAgICAvLyB0ZXN0X3VpbnQ2NCgxMCwgNSkKICAgIGludGNfMiAvLyAxMAogICAgaW50Y18zIC8vIDUKICAgIGNhbGxzdWIgdGVzdF91aW50NjQKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjYwCiAgICAvLyB0ZXN0X2JpZ3VpbnQoMTBuLCA1bikKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYnl0ZWNfMiAvLyAweDA1CiAgICBjYWxsc3ViIHRlc3RfYmlndWludAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjIKICAgIC8vIHRlc3RfYnl0ZXMoYnplcm8oNCkpCiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGNhbGxzdWIgdGVzdF9ieXRlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjY0CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6dGVzdF91aW50NjQoeDogdWludDY0LCB5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NQogICAgLy8gZnVuY3Rpb24gdGVzdF91aW50NjQoeDogdWludDY0LCB5OiB1aW50NjQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjYKICAgIC8vIGFzc2VydCh4ID09PSAxMCwgJ3ggaW5wdXQgbXVzdCBiZSAxMCcpCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydCAvLyB4IGlucHV0IG11c3QgYmUgMTAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoeSA9PT0gNSwgJ3kgaW5wdXQgbXVzdCBiZSA1JykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18zIC8vIDUKICAgID09CiAgICBhc3NlcnQgLy8geSBpbnB1dCBtdXN0IGJlIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo4CiAgICAvLyB4KysKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydCh4ID09PSAxMSkKICAgIHB1c2hpbnQgMTEgLy8gMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMAogICAgLy8geC0tCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KHggPT09IDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTIKICAgIC8vIHggLT0gLS15CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydCh4ID09PSA2KQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNAogICAgLy8gYXNzZXJ0KHkgPT09IDQpCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTUKICAgIC8vIHggKz0geSsrCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTYKICAgIC8vIGFzc2VydCh4ID09PSAxMCkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQoeSA9PT0gNSkKICAgIGR1cAogICAgaW50Y18zIC8vIDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxOAogICAgLy8gY29uc3QgaW52ZXJ0ZWQ6IHVpbnQ2NCA9IH55CiAgICBkdXAKICAgIH4KICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KGludmVydGVkID09PSAyICoqIDY0IC0gMSAtIHkpCiAgICBwdXNoaW50IDE4NDQ2NzQ0MDczNzA5NTUxNjE1IC8vIDE4NDQ2NzQ0MDczNzA5NTUxNjE1CiAgICBkaWcgMQogICAgLQogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MjYKICAgIC8vIGFzc2VydCh5KQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KCEheSkKICAgIGR1cAogICAgIQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MjgKICAgIC8vIHJldHVybiAheQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjp0ZXN0X2JpZ3VpbnQoeDogYnl0ZXMsIHk6IGJ5dGVzKSAtPiB1aW50NjQ6CnRlc3RfYmlndWludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozMAogICAgLy8gZnVuY3Rpb24gdGVzdF9iaWd1aW50KHg6IGJpZ3VpbnQsIHk6IGJpZ3VpbnQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoeCA9PT0gMTBuLCAneCBpbnB1dCBtdXN0IGJlIDEwJykKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBiPT0KICAgIGFzc2VydCAvLyB4IGlucHV0IG11c3QgYmUgMTAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozMgogICAgLy8gYXNzZXJ0KHkgPT09IDVuLCAneSBpbnB1dCBtdXN0IGJlIDUnKQogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGI9PQogICAgYXNzZXJ0IC8vIHkgaW5wdXQgbXVzdCBiZSA1CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzQKICAgIC8vIHgrKwogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozNQogICAgLy8gYXNzZXJ0KHggPT09IDExbikKICAgIHB1c2hieXRlcyAweDBiCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjM3CiAgICAvLyB4LS0KICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMSAvLyAweDAxCiAgICBiLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzkKICAgIC8vIGFzc2VydCh4ID09PSAxMG4pCiAgICBieXRlY18wIC8vIDB4MGEKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDAKICAgIC8vIHggLT0gLS15CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQxCiAgICAvLyBhc3NlcnQoeSA9PT0gNG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDA0CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQyCiAgICAvLyBhc3NlcnQoeCA9PT0gNm4pCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAweDA2CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyB4ICs9IHkrKwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGIrCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYisKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHkgPT09IDVuKQogICAgZHVwCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydCh4ID09PSAxMG4pCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NgogICAgLy8gYXNzZXJ0KHkpCiAgICBkdXAKICAgIGJpdGxlbgogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDcKICAgIC8vIGFzc2VydCghIXkpCiAgICBkdXAKICAgIGJpdGxlbgogICAgIQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiAheQogICAgYml0bGVuCiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OnRlc3RfYnl0ZXMoeDogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTAKICAgIC8vIGZ1bmN0aW9uIHRlc3RfYnl0ZXMoeDogYnl0ZXMpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjUxCiAgICAvLyBhc3NlcnQoeCA9PT0gYnplcm8oNCksICd4IG11c3QgYmUgNCB1bnNldCBieXRlcycpCiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydCAvLyB4IG11c3QgYmUgNCB1bnNldCBieXRlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCB5ID0geC5iaXR3aXNlSW52ZXJ0KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYn4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NAogICAgLy8gYXNzZXJ0KHkgPT09IEJ5dGVzLmZyb21IZXgoJ0ZGRkZGRkZGJykpCiAgICBwdXNoYnl0ZXMgMHhmZmZmZmZmZgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwIDUKICAgIGJ5dGVjYmxvY2sgMHgwYSAweDAxIDB4MDUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fdGVzdF9yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTgKICAgIC8vIHRlc3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC50ZXN0KCkgLT4gdWludDY0Ogp0ZXN0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU4CiAgICAvLyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTkKICAgIC8vIHRlc3RfdWludDY0KDEwLCA1KQogICAgaW50Y18yIC8vIDEwCiAgICBpbnRjXzMgLy8gNQogICAgY2FsbHN1YiB0ZXN0X3VpbnQ2NAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjAKICAgIC8vIHRlc3RfYmlndWludCgxMG4sIDVuKQogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGNhbGxzdWIgdGVzdF9iaWd1aW50CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo2MgogICAgLy8gdGVzdF9ieXRlcyhiemVybyg0KSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgY2FsbHN1YiB0ZXN0X2J5dGVzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjQKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjp0ZXN0X3VpbnQ2NCh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgLT4gdWludDY0Ogp0ZXN0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1CiAgICAvLyBmdW5jdGlvbiB0ZXN0X3VpbnQ2NCh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NgogICAgLy8gYXNzZXJ0KHggPT09IDEwLCAneCBpbnB1dCBtdXN0IGJlIDEwJykKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIHggaW5wdXQgbXVzdCBiZSAxMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjcKICAgIC8vIGFzc2VydCh5ID09PSA1LCAneSBpbnB1dCBtdXN0IGJlIDUnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gNQogICAgPT0KICAgIGFzc2VydCAvLyB5IGlucHV0IG11c3QgYmUgNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjgKICAgIC8vIHgrKwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KHggPT09IDExKQogICAgcHVzaGludCAxMSAvLyAxMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjEwCiAgICAvLyB4LS0KICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjExCiAgICAvLyBhc3NlcnQoeCA9PT0gMTApCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMgogICAgLy8geCAtPSAtLXkKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KHggPT09IDYpCiAgICBwdXNoaW50IDYgLy8gNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoeSA9PT0gNCkKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA0IC8vIDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNQogICAgLy8geCArPSB5KysKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KHggPT09IDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTcKICAgIC8vIGFzc2VydCh5ID09PSA1KQogICAgZHVwCiAgICBpbnRjXzMgLy8gNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBpbnZlcnRlZDogdWludDY0ID0gfnkKICAgIGR1cAogICAgfgogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE5CiAgICAvLyBhc3NlcnQoaW52ZXJ0ZWQgPT09IDIgKiogNjQgLSAxIC0geSkKICAgIHB1c2hpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKICAgIGRpZyAxCiAgICAtCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyNgogICAgLy8gYXNzZXJ0KHkpCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjI3CiAgICAvLyBhc3NlcnQoISF5KQogICAgZHVwCiAgICAhCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyOAogICAgLy8gcmV0dXJuICF5CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OnRlc3RfYmlndWludCh4OiBieXRlcywgeTogYnl0ZXMpIC0+IHVpbnQ2NDoKdGVzdF9iaWd1aW50OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBmdW5jdGlvbiB0ZXN0X2JpZ3VpbnQoeDogYmlndWludCwgeTogYmlndWludCkgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzEKICAgIC8vIGFzc2VydCh4ID09PSAxMG4sICd4IGlucHV0IG11c3QgYmUgMTAnKQogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18wIC8vIDB4MGEKICAgIGI9PQogICAgYXNzZXJ0IC8vIHggaW5wdXQgbXVzdCBiZSAxMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoeSA9PT0gNW4sICd5IGlucHV0IG11c3QgYmUgNScpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzIgLy8gMHgwNQogICAgYj09CiAgICBhc3NlcnQgLy8geSBpbnB1dCBtdXN0IGJlIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozNAogICAgLy8geCsrCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYisKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjM1CiAgICAvLyBhc3NlcnQoeCA9PT0gMTFuKQogICAgcHVzaGJ5dGVzIDB4MGIKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzcKICAgIC8vIHgtLQogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGItCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozOQogICAgLy8gYXNzZXJ0KHggPT09IDEwbikKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0MAogICAgLy8geCAtPSAtLXkKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfYnVyeSAtMQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGItCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDEKICAgIC8vIGFzc2VydCh5ID09PSA0bikKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDIKICAgIC8vIGFzc2VydCh4ID09PSA2bikKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzIDB4MDYKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIHggKz0geSsrCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYisKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKwogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQ0CiAgICAvLyBhc3NlcnQoeSA9PT0gNW4pCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gMHgwNQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NQogICAgLy8gYXNzZXJ0KHggPT09IDEwbikKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQ2CiAgICAvLyBhc3NlcnQoeSkKICAgIGR1cAogICAgYml0bGVuCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NwogICAgLy8gYXNzZXJ0KCEheSkKICAgIGR1cAogICAgYml0bGVuCiAgICAhCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0OAogICAgLy8gcmV0dXJuICF5CiAgICBiaXRsZW4KICAgICEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6dGVzdF9ieXRlcyh4OiBieXRlcykgLT4gdm9pZDoKdGVzdF9ieXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1MAogICAgLy8gZnVuY3Rpb24gdGVzdF9ieXRlcyh4OiBieXRlcykgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTEKICAgIC8vIGFzc2VydCh4ID09PSBiemVybyg0KSwgJ3ggbXVzdCBiZSA0IHVuc2V0IGJ5dGVzJykKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHggbXVzdCBiZSA0IHVuc2V0IGJ5dGVzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IHkgPSB4LmJpdHdpc2VJbnZlcnQoKQogICAgZnJhbWVfZGlnIC0xCiAgICBifgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQoeSA9PT0gQnl0ZXMuZnJvbUhleCgnRkZGRkZGRkYnKSkKICAgIHB1c2hieXRlcyAweGZmZmZmZmZmCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.arc56.json b/tests/approvals/out/prefix-postfix-operators/DemoContract.arc56.json index 882a83d5..878c226c 100644 --- a/tests/approvals/out/prefix-postfix-operators/DemoContract.arc56.json +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.arc56.json @@ -57,39 +57,39 @@ "sourceInfo": [ { "pc": [ - 50 + 42 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 95 + 86 ], "errorMessage": "can only call when creating" }, { "pc": [ - 55 + 47 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 133, - 239 + 124, + 230 ], "errorMessage": "x input must be 10" }, { "pc": [ - 334 + 325 ], "errorMessage": "x must be 4 unset bytes" }, { "pc": [ - 138, - 244 + 129, + 235 ], "errorMessage": "y input must be 5" } @@ -102,8 +102,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxIDEwIDUKICAgIGJ5dGVjYmxvY2sgMHgwYSAweDAxIDB4MDUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3Rlc3Rfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1OAogICAgLy8gdGVzdCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdGVzdAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QudGVzdCgpIC0+IHVpbnQ2NDoKdGVzdDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1OAogICAgLy8gdGVzdCgpIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU5CiAgICAvLyB0ZXN0X3VpbnQ2NCgxMCwgNSkKICAgIGludGNfMiAvLyAxMAogICAgaW50Y18zIC8vIDUKICAgIGNhbGxzdWIgdGVzdF91aW50NjQKICAgIHBvcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjYwCiAgICAvLyB0ZXN0X2JpZ3VpbnQoMTBuLCA1bikKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYnl0ZWNfMiAvLyAweDA1CiAgICBjYWxsc3ViIHRlc3RfYmlndWludAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjIKICAgIC8vIHRlc3RfYnl0ZXMoYnplcm8oNCkpCiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGNhbGxzdWIgdGVzdF9ieXRlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjY0CiAgICAvLyByZXR1cm4gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6dGVzdF91aW50NjQoeDogdWludDY0LCB5OiB1aW50NjQpIC0+IHVpbnQ2NDoKdGVzdF91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NQogICAgLy8gZnVuY3Rpb24gdGVzdF91aW50NjQoeDogdWludDY0LCB5OiB1aW50NjQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjYKICAgIC8vIGFzc2VydCh4ID09PSAxMCwgJ3ggaW5wdXQgbXVzdCBiZSAxMCcpCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydCAvLyB4IGlucHV0IG11c3QgYmUgMTAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo3CiAgICAvLyBhc3NlcnQoeSA9PT0gNSwgJ3kgaW5wdXQgbXVzdCBiZSA1JykKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18zIC8vIDUKICAgID09CiAgICBhc3NlcnQgLy8geSBpbnB1dCBtdXN0IGJlIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo4CiAgICAvLyB4KysKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjkKICAgIC8vIGFzc2VydCh4ID09PSAxMSkKICAgIHB1c2hpbnQgMTEgLy8gMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMAogICAgLy8geC0tCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMQogICAgLy8gYXNzZXJ0KHggPT09IDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTIKICAgIC8vIHggLT0gLS15CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IC0xCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydCh4ID09PSA2KQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNAogICAgLy8gYXNzZXJ0KHkgPT09IDQpCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTUKICAgIC8vIHggKz0geSsrCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTYKICAgIC8vIGFzc2VydCh4ID09PSAxMCkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQoeSA9PT0gNSkKICAgIGR1cAogICAgaW50Y18zIC8vIDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxOAogICAgLy8gY29uc3QgaW52ZXJ0ZWQ6IHVpbnQ2NCA9IH55CiAgICBkdXAKICAgIH4KICAgIHN3YXAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KGludmVydGVkID09PSAyICoqIDY0IC0gMSAtIHkpCiAgICBwdXNoaW50IDE4NDQ2NzQ0MDczNzA5NTUxNjE1IC8vIDE4NDQ2NzQ0MDczNzA5NTUxNjE1CiAgICBkaWcgMQogICAgLQogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MjYKICAgIC8vIGFzc2VydCh5KQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KCEheSkKICAgIGR1cAogICAgIQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MjgKICAgIC8vIHJldHVybiAheQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjp0ZXN0X2JpZ3VpbnQoeDogYnl0ZXMsIHk6IGJ5dGVzKSAtPiB1aW50NjQ6CnRlc3RfYmlndWludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozMAogICAgLy8gZnVuY3Rpb24gdGVzdF9iaWd1aW50KHg6IGJpZ3VpbnQsIHk6IGJpZ3VpbnQpIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQoeCA9PT0gMTBuLCAneCBpbnB1dCBtdXN0IGJlIDEwJykKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBiPT0KICAgIGFzc2VydCAvLyB4IGlucHV0IG11c3QgYmUgMTAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozMgogICAgLy8gYXNzZXJ0KHkgPT09IDVuLCAneSBpbnB1dCBtdXN0IGJlIDUnKQogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGI9PQogICAgYXNzZXJ0IC8vIHkgaW5wdXQgbXVzdCBiZSA1CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzQKICAgIC8vIHgrKwogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozNQogICAgLy8gYXNzZXJ0KHggPT09IDExbikKICAgIHB1c2hieXRlcyAweDBiCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjM3CiAgICAvLyB4LS0KICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMSAvLyAweDAxCiAgICBiLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzkKICAgIC8vIGFzc2VydCh4ID09PSAxMG4pCiAgICBieXRlY18wIC8vIDB4MGEKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDAKICAgIC8vIHggLT0gLS15CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQxCiAgICAvLyBhc3NlcnQoeSA9PT0gNG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDA0CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQyCiAgICAvLyBhc3NlcnQoeCA9PT0gNm4pCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAweDA2CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQzCiAgICAvLyB4ICs9IHkrKwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGIrCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYisKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHkgPT09IDVuKQogICAgZHVwCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydCh4ID09PSAxMG4pCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NgogICAgLy8gYXNzZXJ0KHkpCiAgICBkdXAKICAgIGJpdGxlbgogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDcKICAgIC8vIGFzc2VydCghIXkpCiAgICBkdXAKICAgIGJpdGxlbgogICAgIQogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDgKICAgIC8vIHJldHVybiAheQogICAgYml0bGVuCiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OnRlc3RfYnl0ZXMoeDogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTAKICAgIC8vIGZ1bmN0aW9uIHRlc3RfYnl0ZXMoeDogYnl0ZXMpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjUxCiAgICAvLyBhc3NlcnQoeCA9PT0gYnplcm8oNCksICd4IG11c3QgYmUgNCB1bnNldCBieXRlcycpCiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydCAvLyB4IG11c3QgYmUgNCB1bnNldCBieXRlcwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCB5ID0geC5iaXR3aXNlSW52ZXJ0KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYn4KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NAogICAgLy8gYXNzZXJ0KHkgPT09IEJ5dGVzLmZyb21IZXgoJ0ZGRkZGRkZGJykpCiAgICBwdXNoYnl0ZXMgMHhmZmZmZmZmZgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwIDUKICAgIGJ5dGVjYmxvY2sgMHgwYSAweDAxIDB4MDUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGY1OWUzY2M0IC8vIG1ldGhvZCAidGVzdCgpYm9vbCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fdGVzdF9yb3V0ZUAzCgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA1OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMToKICAgIHJldHVybgoKbWFpbl90ZXN0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTgKICAgIC8vIHRlc3QoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3QKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6RGVtb0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDExCgptYWluX2JhcmVfcm91dGluZ0A2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU3CiAgICAvLyBleHBvcnQgY2xhc3MgRGVtb0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDk6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1NwogICAgLy8gZXhwb3J0IGNsYXNzIERlbW9Db250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjpEZW1vQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTEKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC50ZXN0KCkgLT4gdWludDY0Ogp0ZXN0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU4CiAgICAvLyB0ZXN0KCkgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTkKICAgIC8vIHRlc3RfdWludDY0KDEwLCA1KQogICAgaW50Y18yIC8vIDEwCiAgICBpbnRjXzMgLy8gNQogICAgY2FsbHN1YiB0ZXN0X3VpbnQ2NAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjAKICAgIC8vIHRlc3RfYmlndWludCgxMG4sIDVuKQogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBieXRlY18yIC8vIDB4MDUKICAgIGNhbGxzdWIgdGVzdF9iaWd1aW50CiAgICBwb3AKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo2MgogICAgLy8gdGVzdF9ieXRlcyhiemVybyg0KSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgY2FsbHN1YiB0ZXN0X2J5dGVzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NjQKICAgIC8vIHJldHVybiB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjp0ZXN0X3VpbnQ2NCh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgLT4gdWludDY0Ogp0ZXN0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1CiAgICAvLyBmdW5jdGlvbiB0ZXN0X3VpbnQ2NCh4OiB1aW50NjQsIHk6IHVpbnQ2NCkgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NgogICAgLy8gYXNzZXJ0KHggPT09IDEwLCAneCBpbnB1dCBtdXN0IGJlIDEwJykKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIHggaW5wdXQgbXVzdCBiZSAxMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjcKICAgIC8vIGFzc2VydCh5ID09PSA1LCAneSBpbnB1dCBtdXN0IGJlIDUnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gNQogICAgPT0KICAgIGFzc2VydCAvLyB5IGlucHV0IG11c3QgYmUgNQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjgKICAgIC8vIHgrKwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OQogICAgLy8gYXNzZXJ0KHggPT09IDExKQogICAgcHVzaGludCAxMSAvLyAxMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjEwCiAgICAvLyB4LS0KICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjExCiAgICAvLyBhc3NlcnQoeCA9PT0gMTApCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMgogICAgLy8geCAtPSAtLXkKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KHggPT09IDYpCiAgICBwdXNoaW50IDYgLy8gNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE0CiAgICAvLyBhc3NlcnQoeSA9PT0gNCkKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA0IC8vIDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNQogICAgLy8geCArPSB5KysKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KHggPT09IDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MTcKICAgIC8vIGFzc2VydCh5ID09PSA1KQogICAgZHVwCiAgICBpbnRjXzMgLy8gNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBpbnZlcnRlZDogdWludDY0ID0gfnkKICAgIGR1cAogICAgfgogICAgc3dhcAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjE5CiAgICAvLyBhc3NlcnQoaW52ZXJ0ZWQgPT09IDIgKiogNjQgLSAxIC0geSkKICAgIHB1c2hpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKICAgIGRpZyAxCiAgICAtCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyNgogICAgLy8gYXNzZXJ0KHkpCiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjI3CiAgICAvLyBhc3NlcnQoISF5KQogICAgZHVwCiAgICAhCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czoyOAogICAgLy8gcmV0dXJuICF5CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OnRlc3RfYmlndWludCh4OiBieXRlcywgeTogYnl0ZXMpIC0+IHVpbnQ2NDoKdGVzdF9iaWd1aW50OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMwCiAgICAvLyBmdW5jdGlvbiB0ZXN0X2JpZ3VpbnQoeDogYmlndWludCwgeTogYmlndWludCkgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzEKICAgIC8vIGFzc2VydCh4ID09PSAxMG4sICd4IGlucHV0IG11c3QgYmUgMTAnKQogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18wIC8vIDB4MGEKICAgIGI9PQogICAgYXNzZXJ0IC8vIHggaW5wdXQgbXVzdCBiZSAxMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQoeSA9PT0gNW4sICd5IGlucHV0IG11c3QgYmUgNScpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzIgLy8gMHgwNQogICAgYj09CiAgICBhc3NlcnQgLy8geSBpbnB1dCBtdXN0IGJlIDUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozNAogICAgLy8geCsrCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYisKICAgIGR1cAogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjM1CiAgICAvLyBhc3NlcnQoeCA9PT0gMTFuKQogICAgcHVzaGJ5dGVzIDB4MGIKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6MzcKICAgIC8vIHgtLQogICAgZnJhbWVfZGlnIC0yCiAgICBieXRlY18xIC8vIDB4MDEKICAgIGItCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czozOQogICAgLy8gYXNzZXJ0KHggPT09IDEwbikKICAgIGJ5dGVjXzAgLy8gMHgwYQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0MAogICAgLy8geCAtPSAtLXkKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfYnVyeSAtMQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGItCiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDEKICAgIC8vIGFzc2VydCh5ID09PSA0bikKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDIKICAgIC8vIGFzc2VydCh4ID09PSA2bikKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzIDB4MDYKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NDMKICAgIC8vIHggKz0geSsrCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjXzEgLy8gMHgwMQogICAgYisKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKwogICAgZnJhbWVfYnVyeSAtMgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQ0CiAgICAvLyBhc3NlcnQoeSA9PT0gNW4pCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gMHgwNQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NQogICAgLy8gYXNzZXJ0KHggPT09IDEwbikKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMCAvLyAweDBhCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjQ2CiAgICAvLyBhc3NlcnQoeSkKICAgIGR1cAogICAgYml0bGVuCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0NwogICAgLy8gYXNzZXJ0KCEheSkKICAgIGR1cAogICAgYml0bGVuCiAgICAhCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo0OAogICAgLy8gcmV0dXJuICF5CiAgICBiaXRsZW4KICAgICEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo6dGVzdF9ieXRlcyh4OiBieXRlcykgLT4gdm9pZDoKdGVzdF9ieXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9wcmVmaXgtcG9zdGZpeC1vcGVyYXRvcnMuYWxnby50czo1MAogICAgLy8gZnVuY3Rpb24gdGVzdF9ieXRlcyh4OiBieXRlcykgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTEKICAgIC8vIGFzc2VydCh4ID09PSBiemVybyg0KSwgJ3ggbXVzdCBiZSA0IHVuc2V0IGJ5dGVzJykKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHggbXVzdCBiZSA0IHVuc2V0IGJ5dGVzCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IHkgPSB4LmJpdHdpc2VJbnZlcnQoKQogICAgZnJhbWVfZGlnIC0xCiAgICBifgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3ByZWZpeC1wb3N0Zml4LW9wZXJhdG9ycy5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQoeSA9PT0gQnl0ZXMuZnJvbUhleCgnRkZGRkZGRkYnKSkKICAgIHB1c2hieXRlcyAweGZmZmZmZmZmCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6OkRlbW9Db250cmFjdC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvcHJlZml4LXBvc3RmaXgtb3BlcmF0b3JzLmFsZ28udHM6NTcKICAgIC8vIGV4cG9ydCBjbGFzcyBEZW1vQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiAEAAEKBSYDAQoBAQEFMRsiE0EAMTYaAIAE9Z48xEyOAQACIkMxGSISRDEYIhNEiAArgAEAIk8CVIAEFR98dUxQsCNC/94xGSJMjgEAA0L/0jEYIhJEiAD4I0L/x4oAASQliAAPSCgqiABzSIEEr4gAySOJigIBi/4kEkSL/yUSRIv+IwhJjP6BCxJEi/4jCUmM/iQSRIv/IwmM/4v+i/8JSYz+gQYSRIv/gQQSRIv/IwiL/ov/CEmM/iQSREklEkRJHEyB////////////AUsBCU8CEkRJREkUFEQUiYoCAYv+KKhEi/8qqESL/imgSYz+gAELqESL/imhSYz+KKhEi/8poYz/i/6L/6GM/ov/gAEEqESL/oABBqhEi/8poIv+i/+gjP5JKqhEi/4oqERJk0RJkxQURJMUiYoBAIEEr4v/EkSL/66ABP////8SRImKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.clear.teal b/tests/approvals/out/prefix-postfix-operators/DemoContract.clear.teal index 83539e28..a4d58047 100644 --- a/tests/approvals/out/prefix-postfix-operators/DemoContract.clear.teal +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.approval.0.ssa.ir b/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.approval.0.ssa.ir new file mode 100644 index 00000000..137b890b --- /dev/null +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.approval.0.ssa.ir @@ -0,0 +1,138 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__() -> bool: + block@0: // L57 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L57 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test()bool" => block@2, * => block@3} + block@2: // test_route_L58 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let to_encode%0#0: bool = tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.test() + let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) + let tmp%7#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) + (log tmp%7#0) + return 1u + block@3: // switch_case_default_L57 + goto block@4 + block@4: // switch_case_next_L57 + goto block@9 + block@5: // bare_routing_L57 + let tmp%8#0: uint64 = (txn OnCompletion) + switch tmp%8#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L57 + let tmp%9#0: uint64 = (txn ApplicationID) + let tmp%10#0: bool = (== tmp%9#0 0u) + (assert tmp%10#0) // can only call when creating + tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L57 + goto block@8 + block@8: // switch_case_next_L57 + goto block@9 + block@9: // after_if_else_L57 + return 0u + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.test() -> bool: + block@0: // L58 + tests/approvals/prefix-postfix-operators.algo.ts::test_uint64(10u, 5u) + tests/approvals/prefix-postfix-operators.algo.ts::test_biguint(10b, 5b) + let tmp%0#0: bytes = (bzero 4u) + tests/approvals/prefix-postfix-operators.algo.ts::test_bytes(tmp%0#0) + return 1u + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_uint64(x: uint64, y: uint64) -> bool: + block@0: // L5 + let tmp%0#0: bool = (== x#0 10u) + (assert tmp%0#0) // x input must be 10 + let tmp%1#0: bool = (== y#0 5u) + (assert tmp%1#0) // y input must be 5 + let x#1: uint64 = (+ x#0 1u) + let tmp%2#0: bool = (== x#1 11u) + (assert tmp%2#0) + let x#2: uint64 = (- x#1 1u) + let tmp%3#0: bool = (== x#2 10u) + (assert tmp%3#0) + let y#1: uint64 = (- y#0 1u) + let x#3: uint64 = (- x#2 y#1) + let tmp%4#0: bool = (== x#3 6u) + (assert tmp%4#0) + let tmp%5#0: bool = (== y#1 4u) + (assert tmp%5#0) + let y#2: uint64 = (+ y#1 1u) + let x#4: uint64 = (+ x#3 y#1) + let tmp%6#0: bool = (== x#4 10u) + (assert tmp%6#0) + let tmp%7#0: bool = (== y#2 5u) + (assert tmp%7#0) + let inverted#0: uint64 = (~ y#2) + let tmp%8#0: uint64 = (- 18446744073709551615u y#2) + let tmp%9#0: bool = (== inverted#0 tmp%8#0) + (assert tmp%9#0) + let reinterpret_bool%0#0: bool = y#2 + (assert reinterpret_bool%0#0) + let reinterpret_bool%1#0: bool = y#2 + let tmp%10#0: bool = (! reinterpret_bool%1#0) + let tmp%11#0: bool = (! tmp%10#0) + (assert tmp%11#0) + let reinterpret_bool%2#0: bool = y#2 + let tmp%12#0: bool = (! reinterpret_bool%2#0) + return tmp%12#0 + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_biguint(x: biguint, y: biguint) -> bool: + block@0: // L30 + let tmp%0#0: bool = (b== x#0 10b) + (assert tmp%0#0) // x input must be 10 + let tmp%1#0: bool = (b== y#0 5b) + (assert tmp%1#0) // y input must be 5 + let x#1: biguint = (b+ x#0 1b) + let tmp%2#0: bool = (b== x#1 11b) + (assert tmp%2#0) + let x#2: biguint = (b- x#1 1b) + let tmp%3#0: bool = (b== x#2 10b) + (assert tmp%3#0) + let y#1: biguint = (b- y#0 1b) + let x#3: biguint = (b- x#2 y#1) + let tmp%4#0: bool = (b== y#1 4b) + (assert tmp%4#0) + let tmp%5#0: bool = (b== x#3 6b) + (assert tmp%5#0) + let y#2: biguint = (b+ y#1 1b) + let x#4: biguint = (b+ x#3 y#1) + let tmp%6#0: bool = (b== y#2 5b) + (assert tmp%6#0) + let tmp%7#0: bool = (b== x#4 10b) + (assert tmp%7#0) + let reinterpret_bool%0#0: bool = (bitlen y#2) + (assert reinterpret_bool%0#0) + let reinterpret_bool%1#0: bool = (bitlen y#2) + let tmp%8#0: bool = (! reinterpret_bool%1#0) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) + let reinterpret_bool%2#0: bool = (bitlen y#2) + let tmp%10#0: bool = (! reinterpret_bool%2#0) + return tmp%10#0 + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_bytes(x: bytes) -> void: + block@0: // L50 + let tmp%0#0: bytes = (bzero 4u) + let tmp%1#0: bool = (== x#0 tmp%0#0) + (assert tmp%1#0) // x must be 4 unset bytes + let y#0: bytes = (b~ x#0) + let tmp%2#0: bool = (== y#0 0xffffffff) + (assert tmp%2#0) + return + +subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__algots__.defaultCreate() -> void: + block@0: // L57 + return \ No newline at end of file diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.clear.0.ssa.ir b/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/prefix-postfix-operators/DemoContract.ir/DemoContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/prefix-postfix-operators/DemoContract.ssa.ir b/tests/approvals/out/prefix-postfix-operators/DemoContract.ssa.ir deleted file mode 100644 index a4b3212c..00000000 --- a/tests/approvals/out/prefix-postfix-operators/DemoContract.ssa.ir +++ /dev/null @@ -1,145 +0,0 @@ -contract tests/approvals/prefix-postfix-operators.algo.ts::DemoContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__puya_arc4_router__() -> bool: - block@0: // L57 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L57 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "test()bool" => block@2, * => block@3} - block@2: // test_route_L58 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let to_encode%0#0: bool = tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.test() - let encoded_bool%0#0: bytes = (setbit 0x00 0u to_encode%0#0) - let tmp%7#0: bytes = (concat 0x151f7c75 encoded_bool%0#0) - (log tmp%7#0) - return 1u - block@3: // switch_case_default_L57 - goto block@4 - block@4: // switch_case_next_L57 - goto block@9 - block@5: // bare_routing_L57 - let tmp%8#0: uint64 = (txn OnCompletion) - switch tmp%8#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L57 - let tmp%9#0: uint64 = (txn ApplicationID) - let tmp%10#0: bool = (== tmp%9#0 0u) - (assert tmp%10#0) // can only call when creating - tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L57 - goto block@8 - block@8: // switch_case_next_L57 - goto block@9 - block@9: // after_if_else_L57 - return 0u - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.test() -> bool: - block@0: // L58 - tests/approvals/prefix-postfix-operators.algo.ts::test_uint64(10u, 5u) - tests/approvals/prefix-postfix-operators.algo.ts::test_biguint(10b, 5b) - let tmp%0#0: bytes = (bzero 4u) - tests/approvals/prefix-postfix-operators.algo.ts::test_bytes(tmp%0#0) - return 1u - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_uint64(x: uint64, y: uint64) -> bool: - block@0: // L5 - let tmp%0#0: bool = (== x#0 10u) - (assert tmp%0#0) // x input must be 10 - let tmp%1#0: bool = (== y#0 5u) - (assert tmp%1#0) // y input must be 5 - let x#1: uint64 = (+ x#0 1u) - let tmp%2#0: bool = (== x#1 11u) - (assert tmp%2#0) - let x#2: uint64 = (- x#1 1u) - let tmp%3#0: bool = (== x#2 10u) - (assert tmp%3#0) - let y#1: uint64 = (- y#0 1u) - let x#3: uint64 = (- x#2 y#1) - let tmp%4#0: bool = (== x#3 6u) - (assert tmp%4#0) - let tmp%5#0: bool = (== y#1 4u) - (assert tmp%5#0) - let y#2: uint64 = (+ y#1 1u) - let x#4: uint64 = (+ x#3 y#1) - let tmp%6#0: bool = (== x#4 10u) - (assert tmp%6#0) - let tmp%7#0: bool = (== y#2 5u) - (assert tmp%7#0) - let inverted#0: uint64 = (~ y#2) - let tmp%8#0: uint64 = (- 18446744073709551615u y#2) - let tmp%9#0: bool = (== inverted#0 tmp%8#0) - (assert tmp%9#0) - let reinterpret_bool%0#0: bool = y#2 - (assert reinterpret_bool%0#0) - let reinterpret_bool%1#0: bool = y#2 - let tmp%10#0: bool = (! reinterpret_bool%1#0) - let tmp%11#0: bool = (! tmp%10#0) - (assert tmp%11#0) - let reinterpret_bool%2#0: bool = y#2 - let tmp%12#0: bool = (! reinterpret_bool%2#0) - return tmp%12#0 - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_biguint(x: biguint, y: biguint) -> bool: - block@0: // L30 - let tmp%0#0: bool = (b== x#0 10b) - (assert tmp%0#0) // x input must be 10 - let tmp%1#0: bool = (b== y#0 5b) - (assert tmp%1#0) // y input must be 5 - let x#1: biguint = (b+ x#0 1b) - let tmp%2#0: bool = (b== x#1 11b) - (assert tmp%2#0) - let x#2: biguint = (b- x#1 1b) - let tmp%3#0: bool = (b== x#2 10b) - (assert tmp%3#0) - let y#1: biguint = (b- y#0 1b) - let x#3: biguint = (b- x#2 y#1) - let tmp%4#0: bool = (b== y#1 4b) - (assert tmp%4#0) - let tmp%5#0: bool = (b== x#3 6b) - (assert tmp%5#0) - let y#2: biguint = (b+ y#1 1b) - let x#4: biguint = (b+ x#3 y#1) - let tmp%6#0: bool = (b== y#2 5b) - (assert tmp%6#0) - let tmp%7#0: bool = (b== x#4 10b) - (assert tmp%7#0) - let reinterpret_bool%0#0: bool = (bitlen y#2) - (assert reinterpret_bool%0#0) - let reinterpret_bool%1#0: bool = (bitlen y#2) - let tmp%8#0: bool = (! reinterpret_bool%1#0) - let tmp%9#0: bool = (! tmp%8#0) - (assert tmp%9#0) - let reinterpret_bool%2#0: bool = (bitlen y#2) - let tmp%10#0: bool = (! reinterpret_bool%2#0) - return tmp%10#0 - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::test_bytes(x: bytes) -> void: - block@0: // L50 - let tmp%0#0: bytes = (bzero 4u) - let tmp%1#0: bool = (== x#0 tmp%0#0) - (assert tmp%1#0) // x must be 4 unset bytes - let y#0: bytes = (b~ x#0) - let tmp%2#0: bool = (== y#0 0xffffffff) - (assert tmp%2#0) - return - - subroutine tests/approvals/prefix-postfix-operators.algo.ts::DemoContract.__algots__.defaultCreate() -> void: - block@0: // L57 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/property-ordering/Demo.approval.teal b/tests/approvals/out/property-ordering/Demo.approval.teal index 0683eff2..eceb45f8 100644 --- a/tests/approvals/out/property-ordering/Demo.approval.teal +++ b/tests/approvals/out/property-ordering/Demo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/property-ordering.algo.ts::Demo.approvalProgram: +// tests/approvals/property-ordering.algo.ts::Demo.approvalProgram() -> uint64: +main: // tests/approvals/property-ordering.algo.ts:20 // test_assign_from_literal(4) pushint 4 // 4 diff --git a/tests/approvals/out/property-ordering/Demo.clear.teal b/tests/approvals/out/property-ordering/Demo.clear.teal index 70c45f2c..a4d58047 100644 --- a/tests/approvals/out/property-ordering/Demo.clear.teal +++ b/tests/approvals/out/property-ordering/Demo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/property-ordering.algo.ts::Demo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/property-ordering/Demo.ir/Demo.approval.0.ssa.ir b/tests/approvals/out/property-ordering/Demo.ir/Demo.approval.0.ssa.ir new file mode 100644 index 00000000..5cc1cda9 --- /dev/null +++ b/tests/approvals/out/property-ordering/Demo.ir/Demo.approval.0.ssa.ir @@ -0,0 +1,17 @@ +main tests/approvals/property-ordering.algo.ts::Demo.approvalProgram: + block@0: // L19 + tests/approvals/property-ordering.algo.ts::test_assign_from_literal(4u) + tests/approvals/property-ordering.algo.ts::test_assign_from_var(3u, 4u) + return 1u + +subroutine tests/approvals/property-ordering.algo.ts::test_assign_from_literal(x: uint64) -> void: + block@0: // L10 + let b#0: uint64 = (* x#0 2u) + let b#1: uint64 = (* x#0 2u) + let (obj.a#0: uint64, obj.z#0: uint64) = (b#0, b#1) + return + +subroutine tests/approvals/property-ordering.algo.ts::test_assign_from_var(x.a: uint64, x.b: uint64) -> void: + block@0: // L6 + let (obj.b#0: uint64, obj.a#0: uint64) = (x.b#0, x.a#0) + return \ No newline at end of file diff --git a/tests/approvals/out/property-ordering/Demo.ir/Demo.clear.0.ssa.ir b/tests/approvals/out/property-ordering/Demo.ir/Demo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/property-ordering/Demo.ir/Demo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/property-ordering/Demo.ssa.ir b/tests/approvals/out/property-ordering/Demo.ssa.ir deleted file mode 100644 index df9ecabe..00000000 --- a/tests/approvals/out/property-ordering/Demo.ssa.ir +++ /dev/null @@ -1,24 +0,0 @@ -contract tests/approvals/property-ordering.algo.ts::Demo: - program approval: - subroutine tests/approvals/property-ordering.algo.ts::Demo.approvalProgram() -> bool: - block@0: // L19 - tests/approvals/property-ordering.algo.ts::test_assign_from_literal(4u) - tests/approvals/property-ordering.algo.ts::test_assign_from_var(3u, 4u) - return 1u - - subroutine tests/approvals/property-ordering.algo.ts::test_assign_from_literal(x: uint64) -> void: - block@0: // L10 - let b#0: uint64 = (* x#0 2u) - let b#1: uint64 = (* x#0 2u) - let (obj.a#0: uint64, obj.z#0: uint64) = (b#0, b#1) - return - - subroutine tests/approvals/property-ordering.algo.ts::test_assign_from_var(x.a: uint64, x.b: uint64) -> void: - block@0: // L6 - let (obj.b#0: uint64, obj.a#0: uint64) = (x.b#0, x.a#0) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.approval.teal b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.approval.teal index 1dd6f1bc..edb800a1 100644 --- a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.approval.teal +++ b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram: +// tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() -> uint64: +main: intcblock 1 0 15 45 bytecblock "hello" // tests/approvals/reserve-scratch.algo.ts:13 diff --git a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.clear.teal b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.clear.teal index a73a2abc..a4d58047 100644 --- a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.clear.teal +++ b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.approval.0.ssa.ir b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.approval.0.ssa.ir new file mode 100644 index 00000000..59ce8aba --- /dev/null +++ b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.approval.0.ssa.ir @@ -0,0 +1,20 @@ +main tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram: + block@0: // L12 + tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() + let tmp%0#0: uint64 = (loads 0u) + let tmp%1#0: bool = (== tmp%0#0 1u) + (assert tmp%1#0) + let tmp%2#0: bytes = (loads 0u) + let tmp%3#0: bool = (== tmp%2#0 "hello") + (assert tmp%3#0) + let tmp%4#0: uint64 = (loads 15u) + let tmp%5#0: bool = (== tmp%4#0 45u) + (assert tmp%5#0) + return 1u + +subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() -> void: + block@0: // L6 + (stores 0u 1u) + (stores 1u "hello") + (stores 15u 45u) + return \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.clear.0.ssa.ir b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ir/ReserveScratchAlgo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ssa.ir b/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ssa.ir deleted file mode 100644 index 34a98757..00000000 --- a/tests/approvals/out/reserve-scratch/ReserveScratchAlgo.ssa.ir +++ /dev/null @@ -1,27 +0,0 @@ -contract tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo: - program approval: - subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() -> bool: - block@0: // L12 - tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() - let tmp%0#0: uint64 = (loads 0u) - let tmp%1#0: bool = (== tmp%0#0 1u) - (assert tmp%1#0) - let tmp%2#0: bytes = (loads 0u) - let tmp%3#0: bool = (== tmp%2#0 "hello") - (assert tmp%3#0) - let tmp%4#0: uint64 = (loads 15u) - let tmp%5#0: bool = (== tmp%4#0 45u) - (assert tmp%5#0) - return 1u - - subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() -> void: - block@0: // L6 - (stores 0u 1u) - (stores 1u "hello") - (stores 15u 45u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.approval.teal b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.approval.teal index 22f07e6b..dc59acf6 100644 --- a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.approval.teal +++ b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo.approvalProgram: +// tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo.approvalProgram() -> uint64: +main: intcblock 1 0 15 45 bytecblock "world" "hello" // tests/approvals/reserve-scratch.algo.ts:25 diff --git a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.clear.teal b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.clear.teal index e5a0b635..a4d58047 100644 --- a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.clear.teal +++ b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.approval.0.ssa.ir b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.approval.0.ssa.ir new file mode 100644 index 00000000..3421fb2c --- /dev/null +++ b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.approval.0.ssa.ir @@ -0,0 +1,27 @@ +main tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo.approvalProgram: + block@0: // L24 + tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() + (stores 50u "world") + (stores 16u "world") + return 1u + +subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() -> bool: + block@0: // L12 + tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() + let tmp%0#0: uint64 = (loads 0u) + let tmp%1#0: bool = (== tmp%0#0 1u) + (assert tmp%1#0) + let tmp%2#0: bytes = (loads 0u) + let tmp%3#0: bool = (== tmp%2#0 "hello") + (assert tmp%3#0) + let tmp%4#0: uint64 = (loads 15u) + let tmp%5#0: bool = (== tmp%4#0 45u) + (assert tmp%5#0) + return 1u + +subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() -> void: + block@0: // L6 + (stores 0u 1u) + (stores 1u "hello") + (stores 15u 45u) + return \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.clear.0.ssa.ir b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ir/SubReserveScratchAlgo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ssa.ir b/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ssa.ir deleted file mode 100644 index fc19417a..00000000 --- a/tests/approvals/out/reserve-scratch/SubReserveScratchAlgo.ssa.ir +++ /dev/null @@ -1,34 +0,0 @@ -contract tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo: - program approval: - subroutine tests/approvals/reserve-scratch.algo.ts::SubReserveScratchAlgo.approvalProgram() -> bool: - block@0: // L24 - tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() - (stores 50u "world") - (stores 16u "world") - return 1u - - subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.approvalProgram() -> bool: - block@0: // L12 - tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() - let tmp%0#0: uint64 = (loads 0u) - let tmp%1#0: bool = (== tmp%0#0 1u) - (assert tmp%1#0) - let tmp%2#0: bytes = (loads 0u) - let tmp%3#0: bool = (== tmp%2#0 "hello") - (assert tmp%3#0) - let tmp%4#0: uint64 = (loads 15u) - let tmp%5#0: bool = (== tmp%4#0 45u) - (assert tmp%5#0) - return 1u - - subroutine tests/approvals/reserve-scratch.algo.ts::ReserveScratchAlgo.setThings() -> void: - block@0: // L6 - (stores 0u 1u) - (stores 1u "hello") - (stores 15u 45u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.approval.teal b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.approval.teal index 7e4a09be..9e00c94d 100644 --- a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.approval.teal +++ b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.approvalProgram: +// tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.approvalProgram() -> uint64: +main: bytecblock "123" // tests/approvals/shadowed-variables.algo.ts:8 // const [b, u, f] = this.getValues() diff --git a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.clear.teal b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.clear.teal index 5638c66c..a4d58047 100644 --- a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.clear.teal +++ b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.approval.0.ssa.ir b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.approval.0.ssa.ir new file mode 100644 index 00000000..3cd3b82b --- /dev/null +++ b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.approval.0.ssa.ir @@ -0,0 +1,26 @@ +main tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.approvalProgram: + block@0: // L7 + let (tuple_assignment%0#0: bytes, tuple_assignment%1#0: uint64, tuple_assignment%2#0: bool) = tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.getValues() + let b#0: bytes = tuple_assignment%0#0 + let u#0: uint64 = tuple_assignment%1#0 + let f#0: bool = tuple_assignment%2#0 + let tmp%0#0: bool = (== "123" b#0) + (assert tmp%0#0) // a should be module const (bytes) + let a#0: uint64 = u#0 + let tmp%1#0: bool = (== a#0 123u) + (assert tmp%1#0) // a should be local const (uint) + let a₁#0: bool = f#0 + let tmp%2#0: bool = (! a₁#0) + (assert tmp%2#0) // a should be local let (bool) + let a₁#1: bool = (! a₁#0) + (assert a₁#1) // a should be modified local let (bool) + (assert a₁#1) // a should still be modified local let (bool) + let tmp%3#0: bool = (== a#0 123u) + (assert tmp%3#0) // a should be local const (uint) + let tmp%4#0: bool = (== "123" "123") + (assert tmp%4#0) // a should be module const (bytes) + return 1u + +subroutine tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.getValues() -> : + block@0: // L28 + return "123" 123u 0u \ No newline at end of file diff --git a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.clear.0.ssa.ir b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ir/ShadowedVariablesAlgo.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ssa.ir b/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ssa.ir deleted file mode 100644 index 7ed92d71..00000000 --- a/tests/approvals/out/shadowed-variables/ShadowedVariablesAlgo.ssa.ir +++ /dev/null @@ -1,33 +0,0 @@ -contract tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo: - program approval: - subroutine tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.approvalProgram() -> bool: - block@0: // L7 - let (tuple_assignment%0#0: bytes, tuple_assignment%1#0: uint64, tuple_assignment%2#0: bool) = tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.getValues() - let b#0: bytes = tuple_assignment%0#0 - let u#0: uint64 = tuple_assignment%1#0 - let f#0: bool = tuple_assignment%2#0 - let tmp%0#0: bool = (== "123" b#0) - (assert tmp%0#0) // a should be module const (bytes) - let a#0: uint64 = u#0 - let tmp%1#0: bool = (== a#0 123u) - (assert tmp%1#0) // a should be local const (uint) - let a₁#0: bool = f#0 - let tmp%2#0: bool = (! a₁#0) - (assert tmp%2#0) // a should be local let (bool) - let a₁#1: bool = (! a₁#0) - (assert a₁#1) // a should be modified local let (bool) - (assert a₁#1) // a should still be modified local let (bool) - let tmp%3#0: bool = (== a#0 123u) - (assert tmp%3#0) // a should be local const (uint) - let tmp%4#0: bool = (== "123" "123") - (assert tmp%4#0) // a should be module const (bytes) - return 1u - - subroutine tests/approvals/shadowed-variables.algo.ts::ShadowedVariablesAlgo.getValues() -> : - block@0: // L28 - return "123" 123u 0u - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/BaseWithState.approval.teal b/tests/approvals/out/state-totals/BaseWithState.approval.teal index 0b4605ae..36155a32 100644 --- a/tests/approvals/out/state-totals/BaseWithState.approval.teal +++ b/tests/approvals/out/state-totals/BaseWithState.approval.teal @@ -1,46 +1,47 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::BaseWithState.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "oneGlobal" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - -// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: -constructor: +main_block@3: // tests/approvals/state-totals.algo.ts:4 // export class BaseWithState extends Contract { - proto 0 0 - // tests/approvals/state-totals.algo.ts:5 - // oneGlobal = GlobalState({ initialValue: Uint64(1) }) - bytec_0 // "oneGlobal" - intc_1 // 1 - app_global_put - retsub - - -// tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: - // tests/approvals/state-totals.algo.ts:4 - // export class BaseWithState extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@8 + +main_abi_routing@4: + // tests/approvals/state-totals.algo.ts:4 + // export class BaseWithState extends Contract { txna ApplicationArgs 0 pushbytes 0x2cd95aa1 // method "setState(uint64)void" swap - match __puya_arc4_router___setState_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_setState_route@5 + +main_switch_case_default@6: + +main_switch_case_next@7: -__puya_arc4_router___setState_route@2: +main_after_if_else@12: + // tests/approvals/state-totals.algo.ts:4 + // export class BaseWithState extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__@13: + return + +main_setState_route@5: // tests/approvals/state-totals.algo.ts:9 // setState(n: uint64) { txn OnCompletion @@ -59,21 +60,22 @@ __puya_arc4_router___setState_route@2: // setState(n: uint64) { callsub setState intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__@13 -__puya_arc4_router___bare_routing@5: +main_bare_routing@8: // tests/approvals/state-totals.algo.ts:4 // export class BaseWithState extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@9 + +main_switch_case_default@10: + +main_switch_case_next@11: + b main_after_if_else@12 -__puya_arc4_router_____algots__.defaultCreate@6: +main___algots__.defaultCreate@9: // tests/approvals/state-totals.algo.ts:4 // export class BaseWithState extends Contract { txn ApplicationID @@ -82,14 +84,19 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@7: -__puya_arc4_router___after_if_else@9: +// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +constructor: // tests/approvals/state-totals.algo.ts:4 // export class BaseWithState extends Contract { - intc_0 // 0 + proto 0 0 + // tests/approvals/state-totals.algo.ts:5 + // oneGlobal = GlobalState({ initialValue: Uint64(1) }) + bytec_0 // "oneGlobal" + intc_1 // 1 + app_global_put retsub diff --git a/tests/approvals/out/state-totals/BaseWithState.arc32.json b/tests/approvals/out/state-totals/BaseWithState.arc32.json index 6d00d08e..1ea7e621 100644 --- a/tests/approvals/out/state-totals/BaseWithState.arc32.json +++ b/tests/approvals/out/state-totals/BaseWithState.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAib25lR2xvYmFsIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDcKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/state-totals/BaseWithState.arc56.json b/tests/approvals/out/state-totals/BaseWithState.arc56.json index 6cb58b48..c67f9ea9 100644 --- a/tests/approvals/out/state-totals/BaseWithState.arc56.json +++ b/tests/approvals/out/state-totals/BaseWithState.arc56.json @@ -79,19 +79,19 @@ "sourceInfo": [ { "pc": [ - 67 + 52 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 100 + 84 ], "errorMessage": "can only call when creating" }, { "pc": [ - 72 + 57 ], "errorMessage": "can only call when not creating" } @@ -104,8 +104,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuYXBwcm92YWxQcm9ncmFtOgogICAgaW50Y2Jsb2NrIDAgMQogICAgYnl0ZWNibG9jayAib25lR2xvYmFsIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgY2FsbHN1YiBjb25zdHJ1Y3RvcgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDcKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY2xlYXJTdGF0ZVByb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAoKbWFpbl9hYmlfcm91dGluZ0A0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MmNkOTVhYTEgLy8gbWV0aG9kICJzZXRTdGF0ZSh1aW50NjQpdm9pZCIKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDY6CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzOgogICAgcmV0dXJuCgptYWluX3NldFN0YXRlX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAQzEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIACIjQv/qMRkiTI4BAANC/94xGCISRIgAISNC/9OKAAAoI2eJigEAKIv/Z4AJdHdvR2xvYmFsi/9niYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/state-totals/BaseWithState.clear.teal b/tests/approvals/out/state-totals/BaseWithState.clear.teal index 7fd413dd..a4d58047 100644 --- a/tests/approvals/out/state-totals/BaseWithState.clear.teal +++ b/tests/approvals/out/state-totals/BaseWithState.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::BaseWithState.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir b/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir new file mode 100644 index 00000000..a6b03bd4 --- /dev/null +++ b/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.approval.0.ssa.ir @@ -0,0 +1,64 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/state-totals.algo.ts::BaseWithState.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: + block@0: // L4 + (app_global_put "oneGlobal" 1u) + return + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} + block@2: // setState_route_L9 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + tests/approvals/state-totals.algo.ts::BaseWithState.setState(tmp%8#0) + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%9#0: uint64 = (txn OnCompletion) + switch tmp%9#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L4 + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (== tmp%10#0 0u) + (assert tmp%11#0) // can only call when creating + tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: + block@0: // L9 + (app_global_put "oneGlobal" n#0) + (app_global_put "twoGlobal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: + block@0: // L4 + return \ No newline at end of file diff --git a/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.clear.0.ssa.ir b/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/state-totals/BaseWithState.ir/BaseWithState.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/BaseWithState.ssa.ir b/tests/approvals/out/state-totals/BaseWithState.ssa.ir deleted file mode 100644 index 5b655f06..00000000 --- a/tests/approvals/out/state-totals/BaseWithState.ssa.ir +++ /dev/null @@ -1,71 +0,0 @@ -contract tests/approvals/state-totals.algo.ts::BaseWithState: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/state-totals.algo.ts::BaseWithState.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: - block@0: // L4 - (app_global_put "oneGlobal" 1u) - return - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__puya_arc4_router__() -> bool: - block@0: // L4 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L4 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} - block@2: // setState_route_L9 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - tests/approvals/state-totals.algo.ts::BaseWithState.setState(tmp%8#0) - return 1u - block@3: // switch_case_default_L4 - goto block@4 - block@4: // switch_case_next_L4 - goto block@9 - block@5: // bare_routing_L4 - let tmp%9#0: uint64 = (txn OnCompletion) - switch tmp%9#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L4 - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (== tmp%10#0 0u) - (assert tmp%11#0) // can only call when creating - tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L4 - goto block@8 - block@8: // switch_case_next_L4 - goto block@9 - block@9: // after_if_else_L4 - return 0u - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: - block@0: // L9 - (app_global_put "oneGlobal" n#0) - (app_global_put "twoGlobal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.__algots__.defaultCreate() -> void: - block@0: // L4 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.approval.teal b/tests/approvals/out/state-totals/ExtendsSubWithTotals.approval.teal index 58911912..b7e4c7ad 100644 --- a/tests/approvals/out/state-totals/ExtendsSubWithTotals.approval.teal +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.approval.teal @@ -1,47 +1,50 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "oneGlobal" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - - -// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: -constructor: - // tests/approvals/state-totals.algo.ts:4 - // export class BaseWithState extends Contract { - proto 0 0 - // tests/approvals/state-totals.algo.ts:5 - // oneGlobal = GlobalState({ initialValue: Uint64(1) }) - bytec_0 // "oneGlobal" - intc_1 // 1 - app_global_put - retsub - -// tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/state-totals.algo.ts:27-28 // @contract({ stateTotals: {} }) // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@8 + +main_abi_routing@4: + // tests/approvals/state-totals.algo.ts:27-28 + // @contract({ stateTotals: {} }) + // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { txna ApplicationArgs 0 pushbytes 0x2cd95aa1 // method "setState(uint64)void" swap - match __puya_arc4_router___setState_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_setState_route@5 + +main_switch_case_default@6: + +main_switch_case_next@7: + +main_after_if_else@12: + // tests/approvals/state-totals.algo.ts:27-28 + // @contract({ stateTotals: {} }) + // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { + intc_0 // 0 -__puya_arc4_router___setState_route@2: +main_after_inlined_tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__@13: + return + +main_setState_route@5: // tests/approvals/state-totals.algo.ts:31 // @abimethod({ allowActions: 'OptIn' }) txn OnCompletion @@ -61,22 +64,23 @@ __puya_arc4_router___setState_route@2: // @abimethod({ allowActions: 'OptIn' }) callsub setState intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 - -__puya_arc4_router___bare_routing@5: +main_bare_routing@8: // tests/approvals/state-totals.algo.ts:27-28 // @contract({ stateTotals: {} }) // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@9 + +main_switch_case_default@10: + +main_switch_case_next@11: + b main_after_if_else@12 -__puya_arc4_router_____algots__.defaultCreate@6: +main___algots__.defaultCreate@9: // tests/approvals/state-totals.algo.ts:27-28 // @contract({ stateTotals: {} }) // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { @@ -86,15 +90,19 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@7: -__puya_arc4_router___after_if_else@9: - // tests/approvals/state-totals.algo.ts:27-28 - // @contract({ stateTotals: {} }) - // export class ExtendsSubWithTotals extends SubClassWithExplicitTotals { - intc_0 // 0 +// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +constructor: + // tests/approvals/state-totals.algo.ts:4 + // export class BaseWithState extends Contract { + proto 0 0 + // tests/approvals/state-totals.algo.ts:5 + // oneGlobal = GlobalState({ initialValue: Uint64(1) }) + bytec_0 // "oneGlobal" + intc_1 // 1 + app_global_put retsub diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc32.json b/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc32.json index 7d432f01..12cb192e 100644 --- a/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc32.json +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czozMQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMzCiAgICAvLyBzdXBlci5zZXRTdGF0ZShuKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI5CiAgICAvLyBvbmVMb2NhbCA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgIm9uZUxvY2FsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMzCiAgICAvLyBzdXBlci5zZXRTdGF0ZShuKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI5CiAgICAvLyBvbmVMb2NhbCA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgIm9uZUxvY2FsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc56.json b/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc56.json index 8bddab2b..97a588b3 100644 --- a/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc56.json +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.arc56.json @@ -84,19 +84,19 @@ "sourceInfo": [ { "pc": [ - 67 + 52 ], "errorMessage": "OnCompletion is not OptIn" }, { "pc": [ - 100 + 84 ], "errorMessage": "can only call when creating" }, { "pc": [ - 72 + 57 ], "errorMessage": "can only call when not creating" } @@ -109,8 +109,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czozMQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDM6CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOQoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANzoKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMzCiAgICAvLyBzdXBlci5zZXRTdGF0ZShuKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI5CiAgICAvLyBvbmVMb2NhbCA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgIm9uZUxvY2FsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MzEKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdPcHRJbicgfSkKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkV4dGVuZHNTdWJXaXRoVG90YWxzLl9fcHV5YV9hcmM0X3JvdXRlcl9fQDEzCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI3LTI4CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczoge30gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBFeHRlbmRzU3ViV2l0aFRvdGFscyBleHRlbmRzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAMTA6CgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNy0yOAogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHt9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgRXh0ZW5kc1N1YldpdGhUb3RhbHMgZXh0ZW5kcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6RXh0ZW5kc1N1YldpdGhUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5zZXRTdGF0ZShuOiB1aW50NjQpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjMzCiAgICAvLyBzdXBlci5zZXRTdGF0ZShuKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5zZXRTdGF0ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI5CiAgICAvLyBvbmVMb2NhbCA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgIm9uZUxvY2FsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjM1CiAgICAvLyB0aGlzLm9uZUxvY2FsKFR4bi5zZW5kZXIpLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpFeHRlbmRzU3ViV2l0aFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjctMjgKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7fSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIEV4dGVuZHNTdWJXaXRoVG90YWxzIGV4dGVuZHMgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgewogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAQzEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkjEkQxGCITRDYaAReIACIjQv/qMRkiTI4BAANC/94xGCISRIgAOSNC/9OKAAAoI2eJigEAi/+IABAxAIAIb25lTG9jYWyL/2aJigEAKIv/Z4AJdHdvR2xvYmFsi/9niYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.clear.teal b/tests/approvals/out/state-totals/ExtendsSubWithTotals.clear.teal index 92df2d7c..a4d58047 100644 --- a/tests/approvals/out/state-totals/ExtendsSubWithTotals.clear.teal +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir b/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir new file mode 100644 index 00000000..9bfbc6d9 --- /dev/null +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.approval.0.ssa.ir @@ -0,0 +1,71 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/state-totals.algo.ts::BaseWithState.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: + block@0: // L4 + (app_global_put "oneGlobal" 1u) + return + +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__() -> bool: + block@0: // L27 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L27 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} + block@2: // setState_route_L31 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 OptIn) + (assert tmp%4#0) // OnCompletion is not OptIn + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.setState(tmp%8#0) + return 1u + block@3: // switch_case_default_L27 + goto block@4 + block@4: // switch_case_next_L27 + goto block@9 + block@5: // bare_routing_L27 + let tmp%9#0: uint64 = (txn OnCompletion) + switch tmp%9#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L27 + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (== tmp%10#0 0u) + (assert tmp%11#0) // can only call when creating + tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L27 + goto block@8 + block@8: // switch_case_next_L27 + goto block@9 + block@9: // after_if_else_L27 + return 0u + +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.setState(n: uint64) -> void: + block@0: // L31 + tests/approvals/state-totals.algo.ts::BaseWithState.setState(n#0) + let tmp%0#0: bytes = (txn Sender) + (app_local_put tmp%0#0 "oneLocal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: + block@0: // L9 + (app_global_put "oneGlobal" n#0) + (app_global_put "twoGlobal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: + block@0: // L27 + return \ No newline at end of file diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.clear.0.ssa.ir b/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/state-totals/ExtendsSubWithTotals.ir/ExtendsSubWithTotals.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/ExtendsSubWithTotals.ssa.ir b/tests/approvals/out/state-totals/ExtendsSubWithTotals.ssa.ir deleted file mode 100644 index 51c27b49..00000000 --- a/tests/approvals/out/state-totals/ExtendsSubWithTotals.ssa.ir +++ /dev/null @@ -1,78 +0,0 @@ -contract tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/state-totals.algo.ts::BaseWithState.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: - block@0: // L4 - (app_global_put "oneGlobal" 1u) - return - - subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__puya_arc4_router__() -> bool: - block@0: // L27 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L27 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} - block@2: // setState_route_L31 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 OptIn) - (assert tmp%4#0) // OnCompletion is not OptIn - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.setState(tmp%8#0) - return 1u - block@3: // switch_case_default_L27 - goto block@4 - block@4: // switch_case_next_L27 - goto block@9 - block@5: // bare_routing_L27 - let tmp%9#0: uint64 = (txn OnCompletion) - switch tmp%9#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L27 - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (== tmp%10#0 0u) - (assert tmp%11#0) // can only call when creating - tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L27 - goto block@8 - block@8: // switch_case_next_L27 - goto block@9 - block@9: // after_if_else_L27 - return 0u - - subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.setState(n: uint64) -> void: - block@0: // L31 - tests/approvals/state-totals.algo.ts::BaseWithState.setState(n#0) - let tmp%0#0: bytes = (txn Sender) - (app_local_put tmp%0#0 "oneLocal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: - block@0: // L9 - (app_global_put "oneGlobal" n#0) - (app_global_put "twoGlobal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::ExtendsSubWithTotals.__algots__.defaultCreate() -> void: - block@0: // L27 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.approval.teal b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.approval.teal index 1430ab20..40428c52 100644 --- a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.approval.teal +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.approval.teal @@ -1,47 +1,50 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "oneGlobal" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - - -// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: -constructor: - // tests/approvals/state-totals.algo.ts:4 - // export class BaseWithState extends Contract { - proto 0 0 - // tests/approvals/state-totals.algo.ts:5 - // oneGlobal = GlobalState({ initialValue: Uint64(1) }) - bytec_0 // "oneGlobal" - intc_1 // 1 - app_global_put - retsub - -// tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/state-totals.algo.ts:24-25 // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) // export class SubClassWithExplicitTotals extends BaseWithState {} - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@8 + +main_abi_routing@4: + // tests/approvals/state-totals.algo.ts:24-25 + // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) + // export class SubClassWithExplicitTotals extends BaseWithState {} txna ApplicationArgs 0 pushbytes 0x2cd95aa1 // method "setState(uint64)void" swap - match __puya_arc4_router___setState_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_setState_route@5 + +main_switch_case_default@6: + +main_switch_case_next@7: + +main_after_if_else@12: + // tests/approvals/state-totals.algo.ts:24-25 + // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) + // export class SubClassWithExplicitTotals extends BaseWithState {} + intc_0 // 0 -__puya_arc4_router___setState_route@2: +main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__@13: + return + +main_setState_route@5: // tests/approvals/state-totals.algo.ts:9 // setState(n: uint64) { txn OnCompletion @@ -61,22 +64,23 @@ __puya_arc4_router___setState_route@2: // setState(n: uint64) { callsub setState intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 - -__puya_arc4_router___bare_routing@5: +main_bare_routing@8: // tests/approvals/state-totals.algo.ts:24-25 // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) // export class SubClassWithExplicitTotals extends BaseWithState {} txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@9 + +main_switch_case_default@10: + +main_switch_case_next@11: + b main_after_if_else@12 -__puya_arc4_router_____algots__.defaultCreate@6: +main___algots__.defaultCreate@9: // tests/approvals/state-totals.algo.ts:24-25 // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) // export class SubClassWithExplicitTotals extends BaseWithState {} @@ -86,15 +90,19 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@7: -__puya_arc4_router___after_if_else@9: - // tests/approvals/state-totals.algo.ts:24-25 - // @contract({ stateTotals: { globalUints: 4, localUints: 0 } }) - // export class SubClassWithExplicitTotals extends BaseWithState {} - intc_0 // 0 +// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +constructor: + // tests/approvals/state-totals.algo.ts:4 + // export class BaseWithState extends Contract { + proto 0 0 + // tests/approvals/state-totals.algo.ts:5 + // oneGlobal = GlobalState({ initialValue: Uint64(1) }) + bytec_0 // "oneGlobal" + intc_1 // 1 + app_global_put retsub diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc32.json b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc32.json index a8d92771..4129cb19 100644 --- a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc32.json +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3NldFN0YXRlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc56.json b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc56.json index 08a5ec32..2e374560 100644 --- a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc56.json +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.arc56.json @@ -79,19 +79,19 @@ "sourceInfo": [ { "pc": [ - 67 + 52 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 100 + 84 ], "errorMessage": "can only call when creating" }, { "pc": [ - 72 + 57 ], "errorMessage": "can only call when not creating" } @@ -104,8 +104,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDMKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3NldFN0YXRlX3JvdXRlQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA2CiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANwoKX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuc2V0U3RhdGUobjogdWludDY0KSAtPiB2b2lkOgpzZXRTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo5CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMAogICAgLy8gdGhpcy5vbmVHbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NgogICAgLy8gdHdvR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInR3b0dsb2JhbCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxMQogICAgLy8gdGhpcy50d29HbG9iYWwudmFsdWUgPSBuCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgcHJvdG8gMCAwCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CgptYWluX2FiaV9yb3V0aW5nQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX3NldFN0YXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA2OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDc6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoyNC0yNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgZ2xvYmFsVWludHM6IDQsIGxvY2FsVWludHM6IDAgfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aEV4cGxpY2l0VG90YWxzIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7fQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjI0LTI1CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNCwgbG9jYWxVaW50czogMCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHt9CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoRXhwbGljaXRUb3RhbHMuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OkJhc2VXaXRoU3RhdGUuY29uc3RydWN0b3IoKSAtPiB2b2lkOgpjb25zdHJ1Y3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVdpdGhTdGF0ZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjUKICAgIC8vIG9uZUdsb2JhbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMSkgfSkKICAgIGJ5dGVjXzAgLy8gIm9uZUdsb2JhbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OQogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTAKICAgIC8vIHRoaXMub25lR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjYKICAgIC8vIHR3b0dsb2JhbCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgcHVzaGJ5dGVzICJ0d29HbG9iYWwiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTEKICAgIC8vIHRoaXMudHdvR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscy5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MjQtMjUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGdsb2JhbFVpbnRzOiA0LCBsb2NhbFVpbnRzOiAwIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhFeHBsaWNpdFRvdGFscyBleHRlbmRzIEJhc2VXaXRoU3RhdGUge30KICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAQzEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIACIjQv/qMRkiTI4BAANC/94xGCISRIgAISNC/9OKAAAoI2eJigEAKIv/Z4AJdHdvR2xvYmFsi/9niYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.clear.teal b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.clear.teal index bb0cb81c..a4d58047 100644 --- a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.clear.teal +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir new file mode 100644 index 00000000..c1558f71 --- /dev/null +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.approval.0.ssa.ir @@ -0,0 +1,64 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/state-totals.algo.ts::BaseWithState.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: + block@0: // L4 + (app_global_put "oneGlobal" 1u) + return + +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__() -> bool: + block@0: // L24 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L24 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} + block@2: // setState_route_L9 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + tests/approvals/state-totals.algo.ts::BaseWithState.setState(tmp%8#0) + return 1u + block@3: // switch_case_default_L24 + goto block@4 + block@4: // switch_case_next_L24 + goto block@9 + block@5: // bare_routing_L24 + let tmp%9#0: uint64 = (txn OnCompletion) + switch tmp%9#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L24 + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (== tmp%10#0 0u) + (assert tmp%11#0) // can only call when creating + tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L24 + goto block@8 + block@8: // switch_case_next_L24 + goto block@9 + block@9: // after_if_else_L24 + return 0u + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: + block@0: // L9 + (app_global_put "oneGlobal" n#0) + (app_global_put "twoGlobal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: + block@0: // L24 + return \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.clear.0.ssa.ir b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ir/SubClassWithExplicitTotals.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ssa.ir b/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ssa.ir deleted file mode 100644 index 12f29444..00000000 --- a/tests/approvals/out/state-totals/SubClassWithExplicitTotals.ssa.ir +++ /dev/null @@ -1,71 +0,0 @@ -contract tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/state-totals.algo.ts::BaseWithState.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: - block@0: // L4 - (app_global_put "oneGlobal" 1u) - return - - subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__puya_arc4_router__() -> bool: - block@0: // L24 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L24 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} - block@2: // setState_route_L9 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - tests/approvals/state-totals.algo.ts::BaseWithState.setState(tmp%8#0) - return 1u - block@3: // switch_case_default_L24 - goto block@4 - block@4: // switch_case_next_L24 - goto block@9 - block@5: // bare_routing_L24 - let tmp%9#0: uint64 = (txn OnCompletion) - switch tmp%9#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L24 - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (== tmp%10#0 0u) - (assert tmp%11#0) // can only call when creating - tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L24 - goto block@8 - block@8: // switch_case_next_L24 - goto block@9 - block@9: // after_if_else_L24 - return 0u - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: - block@0: // L9 - (app_global_put "oneGlobal" n#0) - (app_global_put "twoGlobal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::SubClassWithExplicitTotals.__algots__.defaultCreate() -> void: - block@0: // L24 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithState.approval.teal b/tests/approvals/out/state-totals/SubClassWithState.approval.teal index 57cd06b1..37df0685 100644 --- a/tests/approvals/out/state-totals/SubClassWithState.approval.teal +++ b/tests/approvals/out/state-totals/SubClassWithState.approval.teal @@ -1,46 +1,47 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::SubClassWithState.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock "oneGlobal" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: - callsub __puya_arc4_router__ - return - -// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: -constructor: - // tests/approvals/state-totals.algo.ts:4 - // export class BaseWithState extends Contract { - proto 0 0 - // tests/approvals/state-totals.algo.ts:5 - // oneGlobal = GlobalState({ initialValue: Uint64(1) }) - bytec_0 // "oneGlobal" - intc_1 // 1 - app_global_put - retsub - - -// tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@3: // tests/approvals/state-totals.algo.ts:15 // export class SubClassWithState extends BaseWithState { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@5 + bz main_bare_routing@8 + +main_abi_routing@4: + // tests/approvals/state-totals.algo.ts:15 + // export class SubClassWithState extends BaseWithState { txna ApplicationArgs 0 pushbytes 0x2cd95aa1 // method "setState(uint64)void" swap - match __puya_arc4_router___setState_route@2 - b __puya_arc4_router___switch_case_default@3 + match main_setState_route@5 + +main_switch_case_default@6: + +main_switch_case_next@7: -__puya_arc4_router___setState_route@2: +main_after_if_else@12: + // tests/approvals/state-totals.algo.ts:15 + // export class SubClassWithState extends BaseWithState { + intc_0 // 0 + +main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__@13: + return + +main_setState_route@5: // tests/approvals/state-totals.algo.ts:18 // setState(n: uint64) { txn OnCompletion @@ -59,21 +60,22 @@ __puya_arc4_router___setState_route@2: // setState(n: uint64) { callsub setState intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@3: - b __puya_arc4_router___after_if_else@9 + b main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__@13 -__puya_arc4_router___bare_routing@5: +main_bare_routing@8: // tests/approvals/state-totals.algo.ts:15 // export class SubClassWithState extends BaseWithState { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@6 - b __puya_arc4_router___switch_case_default@7 + match main___algots__.defaultCreate@9 -__puya_arc4_router_____algots__.defaultCreate@6: +main_switch_case_default@10: + +main_switch_case_next@11: + b main_after_if_else@12 + +main___algots__.defaultCreate@9: // tests/approvals/state-totals.algo.ts:15 // export class SubClassWithState extends BaseWithState { txn ApplicationID @@ -82,14 +84,19 @@ __puya_arc4_router_____algots__.defaultCreate@6: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__@13 -__puya_arc4_router___switch_case_default@7: -__puya_arc4_router___after_if_else@9: - // tests/approvals/state-totals.algo.ts:15 - // export class SubClassWithState extends BaseWithState { - intc_0 // 0 +// tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: +constructor: + // tests/approvals/state-totals.algo.ts:4 + // export class BaseWithState extends Contract { + proto 0 0 + // tests/approvals/state-totals.algo.ts:5 + // oneGlobal = GlobalState({ initialValue: Uint64(1) }) + bytec_0 // "oneGlobal" + intc_1 // 1 + app_global_put retsub diff --git a/tests/approvals/out/state-totals/SubClassWithState.arc32.json b/tests/approvals/out/state-totals/SubClassWithState.arc32.json index 18fd04fd..5eee9253 100644 --- a/tests/approvals/out/state-totals/SubClassWithState.arc32.json +++ b/tests/approvals/out/state-totals/SubClassWithState.arc32.json @@ -7,8 +7,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTkKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTYKICAgIC8vIHRocmVlR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInRocmVlR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjIwCiAgICAvLyB0aGlzLnRocmVlR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9uZUdsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo2CiAgICAvLyB0d29HbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidHdvR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR3b0dsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTkKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTYKICAgIC8vIHRocmVlR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInRocmVlR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjIwCiAgICAvLyB0aGlzLnRocmVlR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9uZUdsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo2CiAgICAvLyB0d29HbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidHdvR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR3b0dsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/state-totals/SubClassWithState.arc56.json b/tests/approvals/out/state-totals/SubClassWithState.arc56.json index aace8d3d..f4a8973a 100644 --- a/tests/approvals/out/state-totals/SubClassWithState.arc56.json +++ b/tests/approvals/out/state-totals/SubClassWithState.arc56.json @@ -89,19 +89,19 @@ "sourceInfo": [ { "pc": [ - 67 + 52 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 100 + 84 ], "errorMessage": "can only call when creating" }, { "pc": [ - 72 + 57 ], "errorMessage": "can only call when not creating" } @@ -114,8 +114,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLmFwcHJvdmFsUHJvZ3JhbToKICAgIGludGNibG9jayAwIDEKICAgIGJ5dGVjYmxvY2sgIm9uZUdsb2JhbCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgY2FsbHN1YiBfX3B1eWFfYXJjNF9yb3V0ZXJfXwogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLmNvbnN0cnVjdG9yKCkgLT4gdm9pZDoKY29uc3RydWN0b3I6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEJhc2VXaXRoU3RhdGUgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo1CiAgICAvLyBvbmVHbG9iYWwgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDEpIH0pCiAgICBieXRlY18wIC8vICJvbmVHbG9iYWwiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX18oKSAtPiB1aW50NjQ6Cl9fcHV5YV9hcmM0X3JvdXRlcl9fOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDJjZDk1YWExIC8vIG1ldGhvZCAic2V0U3RhdGUodWludDY0KXZvaWQiCiAgICBzd2FwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19zZXRTdGF0ZV9yb3V0ZUAyCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMwoKX19wdXlhX2FyYzRfcm91dGVyX19fc2V0U3RhdGVfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxOAogICAgLy8gc2V0U3RhdGUobjogdWludDY0KSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRAMzoKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDYKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA3OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTkKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTYKICAgIC8vIHRocmVlR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInRocmVlR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjIwCiAgICAvLyB0aGlzLnRocmVlR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9uZUdsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo2CiAgICAvLyB0d29HbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidHdvR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR3b0dsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLmNsZWFyU3RhdGVQcm9ncmFtOgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJvbmVHbG9iYWwiCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCgptYWluX2lmX2JvZHlAMToKICAgIGNhbGxzdWIgY29uc3RydWN0b3IKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgoKbWFpbl9ibG9ja0AzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgyY2Q5NWFhMSAvLyBtZXRob2QgInNldFN0YXRlKHVpbnQ2NCl2b2lkIgogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMzoKICAgIHJldHVybgoKbWFpbl9zZXRTdGF0ZV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE4CiAgICAvLyBzZXRTdGF0ZShuOiB1aW50NjQpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czoxNQogICAgLy8gZXhwb3J0IGNsYXNzIFN1YkNsYXNzV2l0aFN0YXRlIGV4dGVuZHMgQmFzZVdpdGhTdGF0ZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRTdGF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdWJDbGFzc1dpdGhTdGF0ZSBleHRlbmRzIEJhc2VXaXRoU3RhdGUgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIG1hdGNoIG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDkKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMDoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMToKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA5OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpTdWJDbGFzc1dpdGhTdGF0ZS5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6QmFzZVdpdGhTdGF0ZS5jb25zdHJ1Y3RvcigpIC0+IHZvaWQ6CmNvbnN0cnVjdG9yOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlV2l0aFN0YXRlIGV4dGVuZHMgQ29udHJhY3QgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6OlN1YkNsYXNzV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKc2V0U3RhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTgKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTkKICAgIC8vIHN1cGVyLnNldFN0YXRlKG4pCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6MTYKICAgIC8vIHRocmVlR2xvYmFsID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBwdXNoYnl0ZXMgInRocmVlR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjIwCiAgICAvLyB0aGlzLnRocmVlR2xvYmFsLnZhbHVlID0gbgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlKG46IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjpCYXNlV2l0aFN0YXRlLnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjkKICAgIC8vIHNldFN0YXRlKG46IHVpbnQ2NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RhdGUtdG90YWxzLmFsZ28udHM6NQogICAgLy8gb25lR2xvYmFsID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgxKSB9KQogICAgYnl0ZWNfMCAvLyAib25lR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjEwCiAgICAvLyB0aGlzLm9uZUdsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo2CiAgICAvLyB0d29HbG9iYWwgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAidHdvR2xvYmFsIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjExCiAgICAvLyB0aGlzLnR3b0dsb2JhbC52YWx1ZSA9IG4KICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdGF0ZS10b3RhbHMuYWxnby50czo6U3ViQ2xhc3NXaXRoU3RhdGUuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0YXRlLXRvdGFscy5hbGdvLnRzOjE1CiAgICAvLyBleHBvcnQgY2xhc3MgU3ViQ2xhc3NXaXRoU3RhdGUgZXh0ZW5kcyBCYXNlV2l0aFN0YXRlIHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQlvbmVHbG9iYWwxGEAAA4gAQzEbIhNBACU2GgCABCzZWqFMjgEAAiJDMRkiEkQxGCITRDYaAReIACIjQv/qMRkiTI4BAANC/94xGCISRIgAOiNC/9OKAAAoI2eJigEAi/+IABGAC3RocmVlR2xvYmFsi/9niYoBACiL/2eACXR3b0dsb2JhbIv/Z4mKAACJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/state-totals/SubClassWithState.clear.teal b/tests/approvals/out/state-totals/SubClassWithState.clear.teal index 09c86e12..a4d58047 100644 --- a/tests/approvals/out/state-totals/SubClassWithState.clear.teal +++ b/tests/approvals/out/state-totals/SubClassWithState.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/state-totals.algo.ts::SubClassWithState.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir b/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir new file mode 100644 index 00000000..62d0958d --- /dev/null +++ b/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.approval.0.ssa.ir @@ -0,0 +1,70 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/state-totals.algo.ts::BaseWithState.constructor() + goto block@2 + block@2: // after_if_else_L1 + let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: + block@0: // L4 + (app_global_put "oneGlobal" 1u) + return + +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__() -> bool: + block@0: // L15 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L15 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} + block@2: // setState_route_L18 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: uint64 = (btoi tmp%7#0) + tests/approvals/state-totals.algo.ts::SubClassWithState.setState(tmp%8#0) + return 1u + block@3: // switch_case_default_L15 + goto block@4 + block@4: // switch_case_next_L15 + goto block@9 + block@5: // bare_routing_L15 + let tmp%9#0: uint64 = (txn OnCompletion) + switch tmp%9#0 {0u => block@6, * => block@7} + block@6: // __algots__.defaultCreate_L15 + let tmp%10#0: uint64 = (txn ApplicationID) + let tmp%11#0: bool = (== tmp%10#0 0u) + (assert tmp%11#0) // can only call when creating + tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() + return 1u + block@7: // switch_case_default_L15 + goto block@8 + block@8: // switch_case_next_L15 + goto block@9 + block@9: // after_if_else_L15 + return 0u + +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.setState(n: uint64) -> void: + block@0: // L18 + tests/approvals/state-totals.algo.ts::BaseWithState.setState(n#0) + (app_global_put "threeGlobal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: + block@0: // L9 + (app_global_put "oneGlobal" n#0) + (app_global_put "twoGlobal" n#0) + return + +subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: + block@0: // L15 + return \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.clear.0.ssa.ir b/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/state-totals/SubClassWithState.ir/SubClassWithState.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/state-totals/SubClassWithState.ssa.ir b/tests/approvals/out/state-totals/SubClassWithState.ssa.ir deleted file mode 100644 index 105646fb..00000000 --- a/tests/approvals/out/state-totals/SubClassWithState.ssa.ir +++ /dev/null @@ -1,77 +0,0 @@ -contract tests/approvals/state-totals.algo.ts::SubClassWithState: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/state-totals.algo.ts::BaseWithState.constructor() - goto block@2 - block@2: // after_if_else_L1 - let tmp%0#0: bool = tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.constructor() -> void: - block@0: // L4 - (app_global_put "oneGlobal" 1u) - return - - subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__puya_arc4_router__() -> bool: - block@0: // L15 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@5 - block@1: // abi_routing_L15 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "setState(uint64)void" => block@2, * => block@3} - block@2: // setState_route_L18 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: uint64 = (btoi tmp%7#0) - tests/approvals/state-totals.algo.ts::SubClassWithState.setState(tmp%8#0) - return 1u - block@3: // switch_case_default_L15 - goto block@4 - block@4: // switch_case_next_L15 - goto block@9 - block@5: // bare_routing_L15 - let tmp%9#0: uint64 = (txn OnCompletion) - switch tmp%9#0 {0u => block@6, * => block@7} - block@6: // __algots__.defaultCreate_L15 - let tmp%10#0: uint64 = (txn ApplicationID) - let tmp%11#0: bool = (== tmp%10#0 0u) - (assert tmp%11#0) // can only call when creating - tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() - return 1u - block@7: // switch_case_default_L15 - goto block@8 - block@8: // switch_case_next_L15 - goto block@9 - block@9: // after_if_else_L15 - return 0u - - subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.setState(n: uint64) -> void: - block@0: // L18 - tests/approvals/state-totals.algo.ts::BaseWithState.setState(n#0) - (app_global_put "threeGlobal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::BaseWithState.setState(n: uint64) -> void: - block@0: // L9 - (app_global_put "oneGlobal" n#0) - (app_global_put "twoGlobal" n#0) - return - - subroutine tests/approvals/state-totals.algo.ts::SubClassWithState.__algots__.defaultCreate() -> void: - block@0: // L15 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/strings/StringContract.approval.teal b/tests/approvals/out/strings/StringContract.approval.teal index 14571536..49136347 100644 --- a/tests/approvals/out/strings/StringContract.approval.teal +++ b/tests/approvals/out/strings/StringContract.approval.teal @@ -1,31 +1,43 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/strings.algo.ts::StringContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 0 1 bytecblock 0x151f7c75 - callsub __puya_arc4_router__ - return - -// tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: +main_block@1: // tests/approvals/strings.algo.ts:3 // class StringContract extends Contract { - proto 0 1 txn NumAppArgs intc_0 // 0 != - bz __puya_arc4_router___bare_routing@6 + bz main_bare_routing@7 + +main_abi_routing@2: + // tests/approvals/strings.algo.ts:3 + // class StringContract extends Contract { txna ApplicationArgs 0 pushbytes 0x5049bd1b // method "join(string,string)string" pushbytes 0xdc882e2f // method "interpolate(string)string" uncover 2 - match __puya_arc4_router___join_route@2 __puya_arc4_router___interpolate_route@3 - b __puya_arc4_router___switch_case_default@4 + match main_join_route@3 main_interpolate_route@4 -__puya_arc4_router___join_route@2: - // tests/approvals/strings.algo.ts:4 - // join(a: string, b: string): string { +main_switch_case_default@5: + +main_switch_case_next@6: + +main_after_if_else@11: + // tests/approvals/strings.algo.ts:3 + // class StringContract extends Contract { + intc_0 // 0 + +main_after_inlined_tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__@12: + return + +main_interpolate_route@4: + // tests/approvals/strings.algo.ts:8 + // interpolate(a: string): string { txn OnCompletion intc_0 // NoOp == @@ -38,11 +50,9 @@ __puya_arc4_router___join_route@2: // class StringContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/approvals/strings.algo.ts:4 - // join(a: string, b: string): string { - callsub join + // tests/approvals/strings.algo.ts:8 + // interpolate(a: string): string { + callsub interpolate dup len itob @@ -54,11 +64,11 @@ __puya_arc4_router___join_route@2: concat log intc_1 // 1 - retsub + b main_after_inlined_tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__@12 -__puya_arc4_router___interpolate_route@3: - // tests/approvals/strings.algo.ts:8 - // interpolate(a: string): string { +main_join_route@3: + // tests/approvals/strings.algo.ts:4 + // join(a: string, b: string): string { txn OnCompletion intc_0 // NoOp == @@ -71,9 +81,11 @@ __puya_arc4_router___interpolate_route@3: // class StringContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/approvals/strings.algo.ts:8 - // interpolate(a: string): string { - callsub interpolate + txna ApplicationArgs 2 + extract 2 0 + // tests/approvals/strings.algo.ts:4 + // join(a: string, b: string): string { + callsub join dup len itob @@ -85,21 +97,22 @@ __puya_arc4_router___interpolate_route@3: concat log intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@4: - b __puya_arc4_router___after_if_else@10 + b main_after_inlined_tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__@12 -__puya_arc4_router___bare_routing@6: +main_bare_routing@7: // tests/approvals/strings.algo.ts:3 // class StringContract extends Contract { txn OnCompletion intc_0 // 0 swap - match __puya_arc4_router_____algots__.defaultCreate@7 - b __puya_arc4_router___switch_case_default@8 + match main___algots__.defaultCreate@8 -__puya_arc4_router_____algots__.defaultCreate@7: +main_switch_case_default@9: + +main_switch_case_next@10: + b main_after_if_else@11 + +main___algots__.defaultCreate@8: // tests/approvals/strings.algo.ts:3 // class StringContract extends Contract { txn ApplicationID @@ -108,15 +121,7 @@ __puya_arc4_router_____algots__.defaultCreate@7: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - retsub - -__puya_arc4_router___switch_case_default@8: - -__puya_arc4_router___after_if_else@10: - // tests/approvals/strings.algo.ts:3 - // class StringContract extends Contract { - intc_0 // 0 - retsub + b main_after_inlined_tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__@12 // tests/approvals/strings.algo.ts::StringContract.join(a: bytes, b: bytes) -> bytes: diff --git a/tests/approvals/out/strings/StringContract.arc32.json b/tests/approvals/out/strings/StringContract.arc32.json index ecbc7a13..273e956f 100644 --- a/tests/approvals/out/strings/StringContract.arc32.json +++ b/tests/approvals/out/strings/StringContract.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MDQ5YmQxYiAvLyBtZXRob2QgImpvaW4oc3RyaW5nLHN0cmluZylzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhkYzg4MmUyZiAvLyBtZXRob2QgImludGVycG9sYXRlKHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2pvaW5fcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19pbnRlcnBvbGF0ZV9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fam9pbl9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo0CiAgICAvLyBqb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6NAogICAgLy8gam9pbihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGpvaW4KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19pbnRlcnBvbGF0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo4CiAgICAvLyBpbnRlcnBvbGF0ZShhOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGludGVycG9sYXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDEwCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3Quam9pbihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgpqb2luOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo0CiAgICAvLyBqb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo1CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0LmludGVycG9sYXRlKGE6IGJ5dGVzKSAtPiBieXRlczoKaW50ZXJwb2xhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OQogICAgLy8gcmV0dXJuIGBZb3UgaW50ZXJwb2xhdGVkICR7YX1gCiAgICBwdXNoYnl0ZXMgIllvdSBpbnRlcnBvbGF0ZWQgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NTA0OWJkMWIgLy8gbWV0aG9kICJqb2luKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZGM4ODJlMmYgLy8gbWV0aG9kICJpbnRlcnBvbGF0ZShzdHJpbmcpc3RyaW5nIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2pvaW5fcm91dGVAMyBtYWluX2ludGVycG9sYXRlX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9pbnRlcnBvbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo4CiAgICAvLyBpbnRlcnBvbGF0ZShhOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGludGVycG9sYXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2pvaW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6NAogICAgLy8gam9pbihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjQKICAgIC8vIGpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgewogICAgY2FsbHN1YiBqb2luCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5qb2luKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CmpvaW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjQKICAgIC8vIGpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjUKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuaW50ZXJwb2xhdGUoYTogYnl0ZXMpIC0+IGJ5dGVzOgppbnRlcnBvbGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OAogICAgLy8gaW50ZXJwb2xhdGUoYTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo5CiAgICAvLyByZXR1cm4gYFlvdSBpbnRlcnBvbGF0ZWQgJHthfWAKICAgIHB1c2hieXRlcyAiWW91IGludGVycG9sYXRlZCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { "global": { diff --git a/tests/approvals/out/strings/StringContract.arc56.json b/tests/approvals/out/strings/StringContract.arc56.json index a6a09882..eed01b3e 100644 --- a/tests/approvals/out/strings/StringContract.arc56.json +++ b/tests/approvals/out/strings/StringContract.arc56.json @@ -87,21 +87,21 @@ "sourceInfo": [ { "pc": [ - 56, - 95 + 48, + 83 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 142 + 135 ], "errorMessage": "can only call when creating" }, { "pc": [ - 61, - 100 + 53, + 88 ], "errorMessage": "can only call when not creating" } @@ -114,8 +114,20 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIGNhbGxzdWIgX19wdXlhX2FyYzRfcm91dGVyX18KICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDEKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg1MDQ5YmQxYiAvLyBtZXRob2QgImpvaW4oc3RyaW5nLHN0cmluZylzdHJpbmciCiAgICBwdXNoYnl0ZXMgMHhkYzg4MmUyZiAvLyBtZXRob2QgImludGVycG9sYXRlKHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDIKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2pvaW5fcm91dGVAMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19pbnRlcnBvbGF0ZV9yb3V0ZUAzCiAgICBiIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3N3aXRjaF9jYXNlX2RlZmF1bHRANAoKX19wdXlhX2FyYzRfcm91dGVyX19fam9pbl9yb3V0ZUAyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo0CiAgICAvLyBqb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6NAogICAgLy8gam9pbihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGpvaW4KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19pbnRlcnBvbGF0ZV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo4CiAgICAvLyBpbnRlcnBvbGF0ZShhOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGludGVycG9sYXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA0OgogICAgYiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDEwCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDcKICAgIGIgX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4CgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fc3dpdGNoX2Nhc2VfZGVmYXVsdEA4OgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBpbnRjXzAgLy8gMAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3Quam9pbihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgpqb2luOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo0CiAgICAvLyBqb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo1CiAgICAvLyByZXR1cm4gYSArIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0LmludGVycG9sYXRlKGE6IGJ5dGVzKSAtPiBieXRlczoKaW50ZXJwb2xhdGU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OQogICAgLy8gcmV0dXJuIGBZb3UgaW50ZXJwb2xhdGVkICR7YX1gCiAgICBwdXNoYnl0ZXMgIllvdSBpbnRlcnBvbGF0ZWQgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICBwcm90byAwIDAKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6MwogICAgLy8gY2xhc3MgU3RyaW5nQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4NTA0OWJkMWIgLy8gbWV0aG9kICJqb2luKHN0cmluZyxzdHJpbmcpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4ZGM4ODJlMmYgLy8gbWV0aG9kICJpbnRlcnBvbGF0ZShzdHJpbmcpc3RyaW5nIgogICAgdW5jb3ZlciAyCiAgICBtYXRjaCBtYWluX2pvaW5fcm91dGVAMyBtYWluX2ludGVycG9sYXRlX3JvdXRlQDQKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEA1OgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDY6CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMjoKICAgIHJldHVybgoKbWFpbl9pbnRlcnBvbGF0ZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo4CiAgICAvLyBpbnRlcnBvbGF0ZShhOiBzdHJpbmcpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjgKICAgIC8vIGludGVycG9sYXRlKGE6IHN0cmluZyk6IHN0cmluZyB7CiAgICBjYWxsc3ViIGludGVycG9sYXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2pvaW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6NAogICAgLy8gam9pbihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjMKICAgIC8vIGNsYXNzIFN0cmluZ0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjQKICAgIC8vIGpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgewogICAgY2FsbHN1YiBqb2luCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OlN0cmluZ0NvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDEyCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICBtYXRjaCBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRAOToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDExCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjpTdHJpbmdDb250cmFjdC5qb2luKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CmpvaW46CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjQKICAgIC8vIGpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvc3RyaW5ncy5hbGdvLnRzOjUKICAgIC8vIHJldHVybiBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuaW50ZXJwb2xhdGUoYTogYnl0ZXMpIC0+IGJ5dGVzOgppbnRlcnBvbGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9zdHJpbmdzLmFsZ28udHM6OAogICAgLy8gaW50ZXJwb2xhdGUoYTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo5CiAgICAvLyByZXR1cm4gYFlvdSBpbnRlcnBvbGF0ZWQgJHthfWAKICAgIHB1c2hieXRlcyAiWW91IGludGVycG9sYXRlZCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czo6U3RyaW5nQ29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3N0cmluZ3MuYWxnby50czozCiAgICAvLyBjbGFzcyBTdHJpbmdDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiACAAEmAQQVH3x1MRsiE0EAZTYaAIAEUEm9G4AE3IguL08CjgIAJQACIkMxGSISRDEYIhNENhoBVwIAiABZSRUWVwYCTFAoTFCwI0L/3DEZIhJEMRgiE0Q2GgFXAgA2GgJXAgCIACdJFRZXBgJMUChMULAjQv+zMRkiTI4BAANC/6cxGCISRIgAJyNC/5yKAgGL/ov/UImKAQGAEVlvdSBpbnRlcnBvbGF0ZWQgi/9QiYoAAIk=", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, "events": [], "templateVariables": {} diff --git a/tests/approvals/out/strings/StringContract.clear.teal b/tests/approvals/out/strings/StringContract.clear.teal index e1de1543..a4d58047 100644 --- a/tests/approvals/out/strings/StringContract.clear.teal +++ b/tests/approvals/out/strings/StringContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/strings.algo.ts::StringContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/strings/StringContract.ir/StringContract.approval.0.ssa.ir b/tests/approvals/out/strings/StringContract.ir/StringContract.approval.0.ssa.ir new file mode 100644 index 00000000..1cf1616a --- /dev/null +++ b/tests/approvals/out/strings/StringContract.ir/StringContract.approval.0.ssa.ir @@ -0,0 +1,82 @@ +main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: + block@0: // L1 + let tmp%0#0: bool = tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__() + return tmp%0#0 + +subroutine tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__() -> bool: + block@0: // L3 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@6 + block@1: // abi_routing_L3 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "join(string,string)string" => block@2, method "interpolate(string)string" => block@3, * => block@4} + block@2: // join_route_L4 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is not NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // can only call when not creating + let tmp%7#0: bytes = (txna ApplicationArgs 1) + let tmp%8#0: bytes = ((extract 2 0) tmp%7#0) + let tmp%9#0: bytes = (txna ApplicationArgs 2) + let tmp%10#0: bytes = ((extract 2 0) tmp%9#0) + let to_encode%0#0: bytes = tests/approvals/strings.algo.ts::StringContract.join(tmp%8#0, tmp%10#0) + let length%0#0: uint64 = (len to_encode%0#0) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) + let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) + (log tmp%11#0) + return 1u + block@3: // interpolate_route_L8 + let tmp%12#0: uint64 = (txn OnCompletion) + let tmp%13#0: bool = (== tmp%12#0 NoOp) + (assert tmp%13#0) // OnCompletion is not NoOp + let tmp%14#0: uint64 = (txn ApplicationID) + let tmp%15#0: bool = (!= tmp%14#0 0u) + (assert tmp%15#0) // can only call when not creating + let tmp%16#0: bytes = (txna ApplicationArgs 1) + let tmp%17#0: bytes = ((extract 2 0) tmp%16#0) + let to_encode%1#0: bytes = tests/approvals/strings.algo.ts::StringContract.interpolate(tmp%17#0) + let length%1#0: uint64 = (len to_encode%1#0) + let as_bytes%1#0: bytes = (itob length%1#0) + let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_value%1#0: bytes = (concat length_uint16%1#0 to_encode%1#0) + let tmp%18#0: bytes = (concat 0x151f7c75 encoded_value%1#0) + (log tmp%18#0) + return 1u + block@4: // switch_case_default_L3 + goto block@5 + block@5: // switch_case_next_L3 + goto block@10 + block@6: // bare_routing_L3 + let tmp%19#0: uint64 = (txn OnCompletion) + switch tmp%19#0 {0u => block@7, * => block@8} + block@7: // __algots__.defaultCreate_L3 + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (== tmp%20#0 0u) + (assert tmp%21#0) // can only call when creating + tests/approvals/strings.algo.ts::StringContract.__algots__.defaultCreate() + return 1u + block@8: // switch_case_default_L3 + goto block@9 + block@9: // switch_case_next_L3 + goto block@10 + block@10: // after_if_else_L3 + return 0u + +subroutine tests/approvals/strings.algo.ts::StringContract.join(a: bytes, b: bytes) -> bytes: + block@0: // L4 + let tmp%0#0: bytes = (concat a#0 b#0) + return tmp%0#0 + +subroutine tests/approvals/strings.algo.ts::StringContract.interpolate(a: bytes) -> bytes: + block@0: // L8 + let tmp%0#0: bytes = (concat "You interpolated " a#0) + return tmp%0#0 + +subroutine tests/approvals/strings.algo.ts::StringContract.__algots__.defaultCreate() -> void: + block@0: // L3 + return \ No newline at end of file diff --git a/tests/approvals/out/strings/StringContract.ir/StringContract.clear.0.ssa.ir b/tests/approvals/out/strings/StringContract.ir/StringContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/strings/StringContract.ir/StringContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/strings/StringContract.ssa.ir b/tests/approvals/out/strings/StringContract.ssa.ir deleted file mode 100644 index f6ab6e69..00000000 --- a/tests/approvals/out/strings/StringContract.ssa.ir +++ /dev/null @@ -1,89 +0,0 @@ -contract tests/approvals/strings.algo.ts::StringContract: - program approval: - subroutine @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> bool: - block@0: // L1 - let tmp%0#0: bool = tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__() - return tmp%0#0 - - subroutine tests/approvals/strings.algo.ts::StringContract.__puya_arc4_router__() -> bool: - block@0: // L3 - let tmp%0#0: uint64 = (txn NumAppArgs) - let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@6 - block@1: // abi_routing_L3 - let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "join(string,string)string" => block@2, method "interpolate(string)string" => block@3, * => block@4} - block@2: // join_route_L4 - let tmp%3#0: uint64 = (txn OnCompletion) - let tmp%4#0: bool = (== tmp%3#0 NoOp) - (assert tmp%4#0) // OnCompletion is not NoOp - let tmp%5#0: uint64 = (txn ApplicationID) - let tmp%6#0: bool = (!= tmp%5#0 0u) - (assert tmp%6#0) // can only call when not creating - let tmp%7#0: bytes = (txna ApplicationArgs 1) - let tmp%8#0: bytes = ((extract 2 0) tmp%7#0) - let tmp%9#0: bytes = (txna ApplicationArgs 2) - let tmp%10#0: bytes = ((extract 2 0) tmp%9#0) - let to_encode%0#0: bytes = tests/approvals/strings.algo.ts::StringContract.join(tmp%8#0, tmp%10#0) - let length%0#0: uint64 = (len to_encode%0#0) - let as_bytes%0#0: bytes = (itob length%0#0) - let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) - let encoded_value%0#0: bytes = (concat length_uint16%0#0 to_encode%0#0) - let tmp%11#0: bytes = (concat 0x151f7c75 encoded_value%0#0) - (log tmp%11#0) - return 1u - block@3: // interpolate_route_L8 - let tmp%12#0: uint64 = (txn OnCompletion) - let tmp%13#0: bool = (== tmp%12#0 NoOp) - (assert tmp%13#0) // OnCompletion is not NoOp - let tmp%14#0: uint64 = (txn ApplicationID) - let tmp%15#0: bool = (!= tmp%14#0 0u) - (assert tmp%15#0) // can only call when not creating - let tmp%16#0: bytes = (txna ApplicationArgs 1) - let tmp%17#0: bytes = ((extract 2 0) tmp%16#0) - let to_encode%1#0: bytes = tests/approvals/strings.algo.ts::StringContract.interpolate(tmp%17#0) - let length%1#0: uint64 = (len to_encode%1#0) - let as_bytes%1#0: bytes = (itob length%1#0) - let length_uint16%1#0: bytes = ((extract 6 2) as_bytes%1#0) - let encoded_value%1#0: bytes = (concat length_uint16%1#0 to_encode%1#0) - let tmp%18#0: bytes = (concat 0x151f7c75 encoded_value%1#0) - (log tmp%18#0) - return 1u - block@4: // switch_case_default_L3 - goto block@5 - block@5: // switch_case_next_L3 - goto block@10 - block@6: // bare_routing_L3 - let tmp%19#0: uint64 = (txn OnCompletion) - switch tmp%19#0 {0u => block@7, * => block@8} - block@7: // __algots__.defaultCreate_L3 - let tmp%20#0: uint64 = (txn ApplicationID) - let tmp%21#0: bool = (== tmp%20#0 0u) - (assert tmp%21#0) // can only call when creating - tests/approvals/strings.algo.ts::StringContract.__algots__.defaultCreate() - return 1u - block@8: // switch_case_default_L3 - goto block@9 - block@9: // switch_case_next_L3 - goto block@10 - block@10: // after_if_else_L3 - return 0u - - subroutine tests/approvals/strings.algo.ts::StringContract.join(a: bytes, b: bytes) -> bytes: - block@0: // L4 - let tmp%0#0: bytes = (concat a#0 b#0) - return tmp%0#0 - - subroutine tests/approvals/strings.algo.ts::StringContract.interpolate(a: bytes) -> bytes: - block@0: // L8 - let tmp%0#0: bytes = (concat "You interpolated " a#0) - return tmp%0#0 - - subroutine tests/approvals/strings.algo.ts::StringContract.__algots__.defaultCreate() -> void: - block@0: // L3 - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubContract.approval.teal b/tests/approvals/out/super-calls/SubContract.approval.teal index 7145c232..cd82ea53 100644 --- a/tests/approvals/out/super-calls/SubContract.approval.teal +++ b/tests/approvals/out/super-calls/SubContract.approval.teal @@ -1,10 +1,14 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubContract.approvalProgram: +// tests/approvals/super-calls.algo.ts::SubContract.approvalProgram() -> uint64: +main: intcblock 1 0 2 bytecblock "g1" "g2" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: diff --git a/tests/approvals/out/super-calls/SubContract.clear.teal b/tests/approvals/out/super-calls/SubContract.clear.teal index 8f420221..a4d58047 100644 --- a/tests/approvals/out/super-calls/SubContract.clear.teal +++ b/tests/approvals/out/super-calls/SubContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir b/tests/approvals/out/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir new file mode 100644 index 00000000..752f0bb7 --- /dev/null +++ b/tests/approvals/out/super-calls/SubContract.ir/SubContract.approval.0.ssa.ir @@ -0,0 +1,28 @@ +main tests/approvals/super-calls.algo.ts::SubContract.approvalProgram: + block@0: // L16 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/super-calls.algo.ts::SubContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%0#0 1u) + (assert tmp%0#0) + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") + (assert maybe_exists%1#0) // check GlobalState exists + let tmp%1#0: bool = (== maybe_value%1#0 2u) + (assert tmp%1#0) + return 1u + +subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: + block@0: // L13 + tests/approvals/super-calls.algo.ts::SuperContract.constructor() + (app_global_put "g2" 2u) + return + +subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: + block@0: // L4 + (app_global_put "g1" 1u) + return \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubContract.ir/SubContract.clear.0.ssa.ir b/tests/approvals/out/super-calls/SubContract.ir/SubContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/super-calls/SubContract.ir/SubContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubContract.ssa.ir b/tests/approvals/out/super-calls/SubContract.ssa.ir deleted file mode 100644 index e4e5c781..00000000 --- a/tests/approvals/out/super-calls/SubContract.ssa.ir +++ /dev/null @@ -1,35 +0,0 @@ -contract tests/approvals/super-calls.algo.ts::SubContract: - program approval: - subroutine tests/approvals/super-calls.algo.ts::SubContract.approvalProgram() -> bool: - block@0: // L16 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/super-calls.algo.ts::SubContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%0#0 1u) - (assert tmp%0#0) - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") - (assert maybe_exists%1#0) // check GlobalState exists - let tmp%1#0: bool = (== maybe_value%1#0 2u) - (assert tmp%1#0) - return 1u - - subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: - block@0: // L13 - tests/approvals/super-calls.algo.ts::SuperContract.constructor() - (app_global_put "g2" 2u) - return - - subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: - block@0: // L4 - (app_global_put "g1" 1u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubContract.approval.teal b/tests/approvals/out/super-calls/SubSubContract.approval.teal index 80b18a1a..60034182 100644 --- a/tests/approvals/out/super-calls/SubSubContract.approval.teal +++ b/tests/approvals/out/super-calls/SubSubContract.approval.teal @@ -1,10 +1,14 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubSubContract.approvalProgram: +// tests/approvals/super-calls.algo.ts::SubSubContract.approvalProgram() -> uint64: +main: intcblock 1 0 2 bytecblock "g1" "g2" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: diff --git a/tests/approvals/out/super-calls/SubSubContract.clear.teal b/tests/approvals/out/super-calls/SubSubContract.clear.teal index 65232bdb..a4d58047 100644 --- a/tests/approvals/out/super-calls/SubSubContract.clear.teal +++ b/tests/approvals/out/super-calls/SubSubContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubSubContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir b/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir new file mode 100644 index 00000000..c31093e1 --- /dev/null +++ b/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.approval.0.ssa.ir @@ -0,0 +1,28 @@ +main tests/approvals/super-calls.algo.ts::SubSubContract.approvalProgram: + block@0: // L24 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/super-calls.algo.ts::SubContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%0#0 1u) + (assert tmp%0#0) + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") + (assert maybe_exists%1#0) // check GlobalState exists + let tmp%1#0: bool = (== maybe_value%1#0 2u) + (assert tmp%1#0) + return 1u + +subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: + block@0: // L13 + tests/approvals/super-calls.algo.ts::SuperContract.constructor() + (app_global_put "g2" 2u) + return + +subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: + block@0: // L4 + (app_global_put "g1" 1u) + return \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.clear.0.ssa.ir b/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/super-calls/SubSubContract.ir/SubSubContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubContract.ssa.ir b/tests/approvals/out/super-calls/SubSubContract.ssa.ir deleted file mode 100644 index fd650d05..00000000 --- a/tests/approvals/out/super-calls/SubSubContract.ssa.ir +++ /dev/null @@ -1,35 +0,0 @@ -contract tests/approvals/super-calls.algo.ts::SubSubContract: - program approval: - subroutine tests/approvals/super-calls.algo.ts::SubSubContract.approvalProgram() -> bool: - block@0: // L24 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/super-calls.algo.ts::SubContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%0#0 1u) - (assert tmp%0#0) - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") - (assert maybe_exists%1#0) // check GlobalState exists - let tmp%1#0: bool = (== maybe_value%1#0 2u) - (assert tmp%1#0) - return 1u - - subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: - block@0: // L13 - tests/approvals/super-calls.algo.ts::SuperContract.constructor() - (app_global_put "g2" 2u) - return - - subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: - block@0: // L4 - (app_global_put "g1" 1u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubSubContract.approval.teal b/tests/approvals/out/super-calls/SubSubSubContract.approval.teal index 27680df3..749398f7 100644 --- a/tests/approvals/out/super-calls/SubSubSubContract.approval.teal +++ b/tests/approvals/out/super-calls/SubSubSubContract.approval.teal @@ -1,10 +1,14 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubSubSubContract.approvalProgram: +// tests/approvals/super-calls.algo.ts::SubSubSubContract.approvalProgram() -> uint64: +main: intcblock 0 1 2 3 bytecblock "g1" "g2" "g3" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: diff --git a/tests/approvals/out/super-calls/SubSubSubContract.clear.teal b/tests/approvals/out/super-calls/SubSubSubContract.clear.teal index c6e1e28e..a4d58047 100644 --- a/tests/approvals/out/super-calls/SubSubSubContract.clear.teal +++ b/tests/approvals/out/super-calls/SubSubSubContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SubSubSubContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir b/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir new file mode 100644 index 00000000..67bee83a --- /dev/null +++ b/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.approval.0.ssa.ir @@ -0,0 +1,38 @@ +main tests/approvals/super-calls.algo.ts::SubSubSubContract.approvalProgram: + block@0: // L37 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/super-calls.algo.ts::SubSubSubContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%0#0 1u) + (assert tmp%0#0) + let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") + (assert maybe_exists%1#0) // check GlobalState exists + let tmp%1#0: bool = (== maybe_value%1#0 2u) + (assert tmp%1#0) + let (maybe_value%2#0: uint64, maybe_exists%2#0: bool) = (app_global_get_ex 0u "g3") + (assert maybe_exists%2#0) // check GlobalState exists + let tmp%2#0: bool = (== maybe_value%2#0 3u) + (assert tmp%2#0) + return 1u + +subroutine tests/approvals/super-calls.algo.ts::SubSubSubContract.constructor() -> void: + block@0: // L33 + tests/approvals/super-calls.algo.ts::SubContract.constructor() + (app_global_put "g3" 3u) + return + +subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: + block@0: // L13 + tests/approvals/super-calls.algo.ts::SuperContract.constructor() + (app_global_put "g2" 2u) + return + +subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: + block@0: // L4 + (app_global_put "g1" 1u) + return \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.clear.0.ssa.ir b/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/super-calls/SubSubSubContract.ir/SubSubSubContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SubSubSubContract.ssa.ir b/tests/approvals/out/super-calls/SubSubSubContract.ssa.ir deleted file mode 100644 index 3778e72c..00000000 --- a/tests/approvals/out/super-calls/SubSubSubContract.ssa.ir +++ /dev/null @@ -1,45 +0,0 @@ -contract tests/approvals/super-calls.algo.ts::SubSubSubContract: - program approval: - subroutine tests/approvals/super-calls.algo.ts::SubSubSubContract.approvalProgram() -> bool: - block@0: // L37 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/super-calls.algo.ts::SubSubSubContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%0#0 1u) - (assert tmp%0#0) - let (maybe_value%1#0: uint64, maybe_exists%1#0: bool) = (app_global_get_ex 0u "g2") - (assert maybe_exists%1#0) // check GlobalState exists - let tmp%1#0: bool = (== maybe_value%1#0 2u) - (assert tmp%1#0) - let (maybe_value%2#0: uint64, maybe_exists%2#0: bool) = (app_global_get_ex 0u "g3") - (assert maybe_exists%2#0) // check GlobalState exists - let tmp%2#0: bool = (== maybe_value%2#0 3u) - (assert tmp%2#0) - return 1u - - subroutine tests/approvals/super-calls.algo.ts::SubSubSubContract.constructor() -> void: - block@0: // L33 - tests/approvals/super-calls.algo.ts::SubContract.constructor() - (app_global_put "g3" 3u) - return - - subroutine tests/approvals/super-calls.algo.ts::SubContract.constructor() -> void: - block@0: // L13 - tests/approvals/super-calls.algo.ts::SuperContract.constructor() - (app_global_put "g2" 2u) - return - - subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: - block@0: // L4 - (app_global_put "g1" 1u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SuperContract.approval.teal b/tests/approvals/out/super-calls/SuperContract.approval.teal index a9a3e915..a137b8cd 100644 --- a/tests/approvals/out/super-calls/SuperContract.approval.teal +++ b/tests/approvals/out/super-calls/SuperContract.approval.teal @@ -1,9 +1,13 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: +// tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram() -> uint64: +main: bytecblock "g1" txn ApplicationID bnz main_after_if_else@2 + +main_if_body@1: callsub constructor main_after_if_else@2: diff --git a/tests/approvals/out/super-calls/SuperContract.clear.teal b/tests/approvals/out/super-calls/SuperContract.clear.teal index 6382e9d0..a4d58047 100644 --- a/tests/approvals/out/super-calls/SuperContract.clear.teal +++ b/tests/approvals/out/super-calls/SuperContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/super-calls.algo.ts::SuperContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir b/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir new file mode 100644 index 00000000..c916dc08 --- /dev/null +++ b/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.approval.0.ssa.ir @@ -0,0 +1,18 @@ +main tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram: + block@0: // L7 + let reinterpret_bool%0#0: bool = (txn ApplicationID) + goto reinterpret_bool%0#0 ? block@2 : block@1 + block@1: // if_body_L1 + tests/approvals/super-calls.algo.ts::SuperContract.constructor() + goto block@2 + block@2: // after_if_else_L1 + let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") + (assert maybe_exists%0#0) // check GlobalState exists + let tmp%0#0: bool = (== maybe_value%0#0 1u) + (assert tmp%0#0) + return 1u + +subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: + block@0: // L4 + (app_global_put "g1" 1u) + return \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.clear.0.ssa.ir b/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/super-calls/SuperContract.ir/SuperContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/super-calls/SuperContract.ssa.ir b/tests/approvals/out/super-calls/SuperContract.ssa.ir deleted file mode 100644 index c9b4b49d..00000000 --- a/tests/approvals/out/super-calls/SuperContract.ssa.ir +++ /dev/null @@ -1,25 +0,0 @@ -contract tests/approvals/super-calls.algo.ts::SuperContract: - program approval: - subroutine tests/approvals/super-calls.algo.ts::SuperContract.approvalProgram() -> bool: - block@0: // L7 - let reinterpret_bool%0#0: bool = (txn ApplicationID) - goto reinterpret_bool%0#0 ? block@2 : block@1 - block@1: // if_body_L1 - tests/approvals/super-calls.algo.ts::SuperContract.constructor() - goto block@2 - block@2: // after_if_else_L1 - let (maybe_value%0#0: uint64, maybe_exists%0#0: bool) = (app_global_get_ex 0u "g1") - (assert maybe_exists%0#0) // check GlobalState exists - let tmp%0#0: bool = (== maybe_value%0#0 1u) - (assert tmp%0#0) - return 1u - - subroutine tests/approvals/super-calls.algo.ts::SuperContract.constructor() -> void: - block@0: // L4 - (app_global_put "g1" 1u) - return - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file diff --git a/tests/approvals/out/uint64-expressions/DemoContract.approval.teal b/tests/approvals/out/uint64-expressions/DemoContract.approval.teal index 49c68aba..be377c4a 100644 --- a/tests/approvals/out/uint64-expressions/DemoContract.approval.teal +++ b/tests/approvals/out/uint64-expressions/DemoContract.approval.teal @@ -1,6 +1,8 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/uint64-expressions.algo.ts::DemoContract.approvalProgram: +// tests/approvals/uint64-expressions.algo.ts::DemoContract.approvalProgram() -> uint64: +main: // tests/approvals/uint64-expressions.algo.ts:10 // return test().length pushint 5 // 5 diff --git a/tests/approvals/out/uint64-expressions/DemoContract.clear.teal b/tests/approvals/out/uint64-expressions/DemoContract.clear.teal index aab32d34..a4d58047 100644 --- a/tests/approvals/out/uint64-expressions/DemoContract.clear.teal +++ b/tests/approvals/out/uint64-expressions/DemoContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/approvals/uint64-expressions.algo.ts::DemoContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return diff --git a/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir b/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir new file mode 100644 index 00000000..d28e84d5 --- /dev/null +++ b/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.approval.0.ssa.ir @@ -0,0 +1,3 @@ +main tests/approvals/uint64-expressions.algo.ts::DemoContract.approvalProgram: + block@0: // L9 + return 5u \ No newline at end of file diff --git a/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir b/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir new file mode 100644 index 00000000..1253eaad --- /dev/null +++ b/tests/approvals/out/uint64-expressions/DemoContract.ir/DemoContract.clear.0.ssa.ir @@ -0,0 +1,3 @@ +main @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/tests/approvals/out/uint64-expressions/DemoContract.ssa.ir b/tests/approvals/out/uint64-expressions/DemoContract.ssa.ir deleted file mode 100644 index 31b777a4..00000000 --- a/tests/approvals/out/uint64-expressions/DemoContract.ssa.ir +++ /dev/null @@ -1,10 +0,0 @@ -contract tests/approvals/uint64-expressions.algo.ts::DemoContract: - program approval: - subroutine tests/approvals/uint64-expressions.algo.ts::DemoContract.approvalProgram() -> uint64: - block@0: // L9 - return 5u - - program clear-state: - subroutine @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> bool: - block@0: // L1 - return 1u \ No newline at end of file