@alpha-arcade/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts/market_app.ts","../src/contracts/matcher_app.ts","../src/utils/fees.ts","../src/utils/state.ts","../src/utils/matching.ts","../src/modules/orderbook.ts","../src/modules/trading.ts","../src/modules/positions.ts","../src/modules/markets.ts","../src/client.ts"],"names":["algokit","AtomicTransactionComposer","modelsv2","APP_SPEC","algokit2","Decimal","algosdk","getApplicationAddress","algokit3","algokit4"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable */\n// @ts-nocheck\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^2\n */\nimport * as algokit from '@algorandfoundation/algokit-utils'\nimport type {\n ABIAppCallArg,\n AppCallTransactionResult,\n AppCallTransactionResultOfType,\n AppCompilationResult,\n AppReference,\n AppState,\n AppStorageSchema,\n CoreAppCallArgs,\n RawAppCallArgs,\n TealTemplateParams,\n} from '@algorandfoundation/algokit-utils/types/app'\nimport type {\n AppClientCallCoreParams,\n AppClientCompilationParams,\n AppClientDeployCoreParams,\n AppDetails,\n ApplicationClient,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport type { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec'\nimport type { SendTransactionResult, TransactionToSign, SendTransactionFrom, SendTransactionParams } from '@algorandfoundation/algokit-utils/types/transaction'\nimport type { ABIResult, TransactionWithSigner } from 'algosdk'\nimport { Algodv2, OnApplicationComplete, Transaction, AtomicTransactionComposer, modelsv2 } from 'algosdk'\nexport const APP_SPEC: AppSpec = {\n \"hints\": {\n \"on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8\": {\n \"call_config\": {\n \"no_op\": \"CREATE\"\n }\n },\n \"create_escrow(uint64,uint64,uint64,uint8)uint64\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"activate_market()uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"process_potential_match(application,application)uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"resolve_market(uint8)uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"merge_shares()uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"split_shares()uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"claim()uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"donate_excess_to_market_friend()uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"delete_escrow(uint64,address)uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"delete()uint8\": {\n \"call_config\": {\n \"delete_application\": \"CALL\"\n }\n },\n \"do_noop(uint64)uint64\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n },\n \"on_update()uint64\": {\n \"call_config\": {\n \"update_application\": \"CALL\"\n }\n }\n },\n \"source\": {\n \"approval\": \"I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDEgMCAyIDI1NiAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAgMTg0NDY3NDQwNzM3MDk1NTE2MTUKYnl0ZWNibG9jayAweDYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0IDB4Nzk2NTczNWY3Mzc1NzA3MDZjNzkgMHg2ZTZmNWY3Mzc1NzA3MDZjNzkgMHg3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHg2ZTZmNWY2MTczNzM2NTc0NWY2OTY0IDB4MTUxZjdjNzUgMHg3MDZmNzM2OTc0Njk2ZjZlIDB4MDAgMHg2OTczNWY3MjY1NzM2ZjZjNzY2NTY0IDB4NmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyIDB4NzA3MjY5NjM2NSAweDczNjk2NDY1IDB4IDB4NmY3NzZlNjU3MiAweDY5NzM1ZjYxNjM3NDY5NzY2MTc0NjU2NCAweDY2NjU2NTVmNjI2MTczNjU1ZjcwNjU3MjYzNjU2ZTc0IDB4NmQ2MTcyNmI2NTc0NWY2MTcwNzA1ZjY5NjQgMHg3MzZjNjk3MDcwNjE2NzY1IDB4NmY3NTc0NjM2ZjZkNjUgMHgxMTllM2M0YiAweDZmNzI2MTYzNmM2NTVmNjE2NDY0NzI2NTczNzMgMHg2NjY1NjU1ZjYxNjQ2NDcyNjU3MzczIDB4NjU3MzYzNzI2Zjc3NWY2MzYxNmU2MzY1NmM1ZjYxNjQ2NDcyNjU3MzczIDB4NDE2YzcwNjg2MTIwNGQ2MTcyNmI2NTc0MjAgMHg2ODc0NzQ3MDczM2EyZjJmNzc3Nzc3MmU2MTZjNzA2ODYxNjE3MjYzNjE2NDY1MmU2MzZmNmQyZjZkNjE3MjZiNjU3NDJmIDB4NjY2NTY1NWY3NDY5NmQ2NTcyNWY3Mzc0NjE3Mjc0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YmE4ZDYxY2IgLy8gIm9uX2NyZWF0ZShzdHJpbmcsdWludDY0LGFkZHJlc3MsdWludDY0LGFkZHJlc3Msc3RyaW5nLGFkZHJlc3MsdWludDY0LHVpbnQ2NCxhZGRyZXNzKXVpbnQ4Igo9PQpibnogbWFpbl9sMjYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhlMTFhZjJhMCAvLyAiY3JlYXRlX2VzY3Jvdyh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50OCl1aW50NjQiCj09CmJueiBtYWluX2wyNQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDAyYTRlMzA5IC8vICJhY3RpdmF0ZV9tYXJrZXQoKXVpbnQ4Igo9PQpibnogbWFpbl9sMjQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhiYTFkZWVmNSAvLyAicHJvY2Vzc19wb3RlbnRpYWxfbWF0Y2goYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDgiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGZiZGJmMTExIC8vICJyZXNvbHZlX21hcmtldCh1aW50OCl1aW50OCIKPT0KYm56IG1haW5fbDIyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4OGM1ZGIwNTYgLy8gIm1lcmdlX3NoYXJlcygpdWludDgiCj09CmJueiBtYWluX2wyMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDgzMjFiM2JkIC8vICJzcGxpdF9zaGFyZXMoKXVpbnQ4Igo9PQpibnogbWFpbl9sMjAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzMjAwNjIzYiAvLyAiY2xhaW0oKXVpbnQ4Igo9PQpibnogbWFpbl9sMTkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhhN2ExNTcxZSAvLyAiZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kKCl1aW50OCIKPT0KYm56IG1haW5fbDE4CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NDI1ZGViM2QgLy8gImRlbGV0ZV9lc2Nyb3codWludDY0LGFkZHJlc3MpdWludDgiCj09CmJueiBtYWluX2wxNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDE5IC8vICJkZWxldGUoKXVpbnQ4Igo9PQpibnogbWFpbl9sMTYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhiNGYxMWExOCAvLyAiZG9fbm9vcCh1aW50NjQpdWludDY0Igo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyNGMzZDIzNCAvLyAib25fdXBkYXRlKCl1aW50NjQiCj09CmJueiBtYWluX2wxNAplcnIKbWFpbl9sMTQ6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG9udXBkYXRlY2FzdGVyXzQyCmludGNfMCAvLyAxCnJldHVybgptYWluX2wxNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkb25vb3BjYXN0ZXJfNDEKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVjYXN0ZXJfNDAKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE3Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWVzY3Jvd2Nhc3Rlcl8zOQppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMTg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRjYXN0ZXJfMzgKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNsYWltY2FzdGVyXzM3CmludGNfMCAvLyAxCnJldHVybgptYWluX2wyMDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzEgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBzcGxpdHNoYXJlc2Nhc3Rlcl8zNgppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgbWVyZ2VzaGFyZXNjYXN0ZXJfMzUKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDIyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHJlc29sdmVtYXJrZXRjYXN0ZXJfMzQKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDIzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHByb2Nlc3Nwb3RlbnRpYWxtYXRjaGNhc3Rlcl8zMwppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgYWN0aXZhdGVtYXJrZXRjYXN0ZXJfMzIKaW50Y18wIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMSAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWVzY3Jvd2Nhc3Rlcl8zMQppbnRjXzAgLy8gMQpyZXR1cm4KbWFpbl9sMjY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18xIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgb25jcmVhdGVjYXN0ZXJfMzAKaW50Y18wIC8vIDEKcmV0dXJuCgovLyBkaXZfY2VpbF9ieXRlcwpkaXZjZWlsYnl0ZXNfMDoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYi8Kc3RvcmUgMTIKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQpiJQpsZW4KaW50Y18xIC8vIDAKPgpibnogZGl2Y2VpbGJ5dGVzXzBfbDIKbG9hZCAxMgpyZXRzdWIKZGl2Y2VpbGJ5dGVzXzBfbDI6CmxvYWQgMTIKaW50Y18wIC8vIDEKaXRvYgpiKwpyZXRzdWIKCi8vIGNhbGN1bGF0ZV9mZWUKY2FsY3VsYXRlZmVlXzE6CnByb3RvIDMgMQpmcmFtZV9kaWcgLTMKaXRvYgpzdG9yZSAyCmZyYW1lX2RpZyAtMgppdG9iCnN0b3JlIDMKaW50YyA0IC8vIDEwMDAwMDAKZnJhbWVfZGlnIC0yCi0KaXRvYgpzdG9yZSA0CmxvYWQgMgpsb2FkIDMKYioKc3RvcmUgMgpsb2FkIDIKbG9hZCA0CmIqCnN0b3JlIDIKbG9hZCAyCmZyYW1lX2RpZyAtMQppdG9iCmIqCnN0b3JlIDIKbG9hZCAyCmludGMgNSAvLyAxMDAwMDAwMDAwMDAwMDAwMDAwCml0b2IKYi8KYnRvaQpyZXRzdWIKCi8vIGNhbGN1bGF0ZV9mZWVfY29tbWl0CmNhbGN1bGF0ZWZlZWNvbW1pdF8yOgpwcm90byAzIDEKZnJhbWVfZGlnIC0zCml0b2IKc3RvcmUgOQpmcmFtZV9kaWcgLTIKaXRvYgpzdG9yZSAxMAppbnRjIDQgLy8gMTAwMDAwMApmcmFtZV9kaWcgLTIKLQppdG9iCnN0b3JlIDExCmxvYWQgOQpsb2FkIDEwCmIqCnN0b3JlIDkKbG9hZCA5CmxvYWQgMTEKYioKc3RvcmUgOQpsb2FkIDkKZnJhbWVfZGlnIC0xCml0b2IKYioKc3RvcmUgOQpsb2FkIDkKaW50YyA1IC8vIDEwMDAwMDAwMDAwMDAwMDAwMDAKaXRvYgpjYWxsc3ViIGRpdmNlaWxieXRlc18wCmJ0b2kKcmV0c3ViCgovLyBnbG9iYWxfbXVzdF9nZXQKZ2xvYmFsbXVzdGdldF8zOgpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmFzc2VydApsb2FkIDAKcmV0c3ViCgovLyBnZXRfYXBwX2FkZHIKZ2V0YXBwYWRkcl80Ogpwcm90byAxIDEKZnJhbWVfZGlnIC0xCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNgpzdG9yZSA1CmxvYWQgNgphc3NlcnQKbG9hZCA1CnJldHN1YgoKLy8gZ2V0X2FwcF9jcmVhdG9yCmdldGFwcGNyZWF0b3JfNToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQphcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCnN0b3JlIDE2CnN0b3JlIDE1CmxvYWQgMTYKYXNzZXJ0CmxvYWQgMTUKcmV0c3ViCgovLyBzZW5kX2Fzc2V0CnNlbmRhc3NldF82Ogpwcm90byA0IDAKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBTZW5kZXIKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgWGZlckFzc2V0CmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBzZW5kX2FsZ28Kc2VuZGFsZ29fNzoKcHJvdG8gMyAwCml0eG5fYmVnaW4KaW50Y18wIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIFNlbmRlcgpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBbW91bnQKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgUmVjZWl2ZXIKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBnZXRfZnVuZHNfdG9fdHJhZGVyCmdldGZ1bmRzdG90cmFkZXJfODoKcHJvdG8gNCAwCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDgKc3RvcmUgNwpsb2FkIDgKYm56IGdldGZ1bmRzdG90cmFkZXJfOF9sMgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMwpjYWxsc3ViIHNlbmRhc3NldF82CmIgZ2V0ZnVuZHN0b3RyYWRlcl84X2wzCmdldGZ1bmRzdG90cmFkZXJfOF9sMjoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTQKY2FsbHN1YiBzZW5kYXNzZXRfNgpnZXRmdW5kc3RvdHJhZGVyXzhfbDM6CnJldHN1YgoKLy8gc2FmZV93YWxsZXRfYmFsYW5jZQpzYWZld2FsbGV0YmFsYW5jZV85Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgphc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKc3RvcmUgMTgKcmV0c3ViCgovLyBvbl9jcmVhdGUKb25jcmVhdGVfMTA6CnByb3RvIDEwIDEKaW50Y18xIC8vIDAKcHVzaGJ5dGVzIDB4NzQ2OTc0NmM2NSAvLyAidGl0bGUiCmZyYW1lX2RpZyAtMTAKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKZnJhbWVfZGlnIC05CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDIwIC8vICJvcmFjbGVfYWRkcmVzcyIKZnJhbWVfZGlnIC04CmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDcyNjU3MzZmNmM3NTc0Njk2ZjZlNWY3NDY5NmQ2NSAvLyAicmVzb2x1dGlvbl90aW1lIgpmcmFtZV9kaWcgLTcKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTQgLy8gImlzX2FjdGl2YXRlZCIKaW50Y18xIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmludGNfMSAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKZnJhbWVfZGlnIC02CmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDcyNzU2YzY1NzMgLy8gInJ1bGVzIgpmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMjEgLy8gImZlZV9hZGRyZXNzIgpmcmFtZV9kaWcgLTQKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTUgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApwdXNoYnl0ZXMgMHg2NjY1NjU1Zjc0Njk2ZDY1NzI1Zjc0Njg3MjY1NzM2ODZmNmM2NCAvLyAiZmVlX3RpbWVyX3RocmVzaG9sZCIKZnJhbWVfZGlnIC0yCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDIyIC8vICJlc2Nyb3dfY2FuY2VsX2FkZHJlc3MiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGludF90b19hc2NpaQppbnR0b2FzY2lpXzExOgpwcm90byAxIDEKcHVzaGJ5dGVzIDB4MzAzMTMyMzMzNDM1MzYzNzM4MzkgLy8gIjAxMjM0NTY3ODkiCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMQpleHRyYWN0MwpyZXRzdWIKCi8vIGl0b2EKaXRvYV8xMjoKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzEgLy8gMAo9PQpibnogaXRvYV8xMl9sNQpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAovCmludGNfMSAvLyAwCj4KYm56IGl0b2FfMTJfbDQKYnl0ZWMgMTIgLy8gIiIKaXRvYV8xMl9sMzoKZnJhbWVfZGlnIC0xCnB1c2hpbnQgMTAgLy8gMTAKJQpjYWxsc3ViIGludHRvYXNjaWlfMTEKY29uY2F0CmIgaXRvYV8xMl9sNgppdG9hXzEyX2w0OgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAovCmNhbGxzdWIgaXRvYV8xMgpiIGl0b2FfMTJfbDMKaXRvYV8xMl9sNToKcHVzaGJ5dGVzIDB4MzAgLy8gIjAiCml0b2FfMTJfbDY6CnJldHN1YgoKLy8gc2V0dXBfZXNjcm93CnNldHVwZXNjcm93XzEzOgpwcm90byA3IDAKaXR4bl9iZWdpbgppbnRjXzAgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC03CmNhbGxzdWIgZ2V0YXBwYWRkcl80Cml0eG5fZmllbGQgUmVjZWl2ZXIKcHVzaGludCAzMDAwMDAgLy8gMzAwMDAwCnB1c2hpbnQgMzAwMCAvLyAzMDAwCisKcHVzaGludCAxMDAwMDAgLy8gMTAwMDAwCisKaXR4bl9maWVsZCBBbW91bnQKZ2xvYmFsIE1pblR4bkZlZQppdHhuX2ZpZWxkIEZlZQppdHhuX25leHQKcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTcKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECnB1c2hieXRlcyAweDk1NGU3ZDcyIC8vICJzZXR1cChzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKXVpbnQ4IgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTMKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTYKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTIKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTQKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTUKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldHMKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCnR4biBTZW5kZXIKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX25leHQKcHVzaGludCA0IC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKaXR4bl9maWVsZCBYZmVyQXNzZXQKZnJhbWVfZGlnIC03CmNhbGxzdWIgZ2V0YXBwYWRkcl80Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgpnbG9iYWwgTWluVHhuRmVlCml0eG5fZmllbGQgRmVlCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKaXR4bl9maWVsZCBBc3NldEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGNyZWF0ZV9lc2Nyb3cKY3JlYXRlZXNjcm93XzE0Ogpwcm90byA0IDEKaW50Y18xIC8vIDAKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBTZW5kZXIKdHhuIFNlbmRlcgo9PQphc3NlcnQKdHhuIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFNlbmRlcgp0eG4gU2VuZGVyCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFR5cGVFbnVtCmludGNfMCAvLyBwYXkKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgUmVjZWl2ZXIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQW1vdW50CnB1c2hpbnQgOTU2NTAwIC8vIDk1NjUwMAo+PQphc3NlcnQKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAwCj09CmFzc2VydApieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMyAvLyAieWVzX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldApieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKPT0KfHwKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKPT0KfHwKYXNzZXJ0Cml0eG5fYmVnaW4KcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoYnl0ZXMgMHgwODIwMDYwMDAxYzA4NDNkMDQ4MDAyODA4MDkwYmJiYWQ2YWRmMDBkMjYxNzBkNmQ2MTcyNmI2NTc0NWY2MTcwNzA1ZjY5NjQwODcwNmY3MzY5NzQ2OTZmNmUwNTcwNzI2OTYzNjUwNDczNjk2NDY1MDg3MzZjNjk3MDcwNjE2NzY1MDU2Zjc3NmU2NTcyMDg3MTc1NjE2ZTc0Njk3NDc5MGY2NjY1NjU1Zjc0Njk2ZDY1NzI1ZjczNzQ2MTcyNzQwZjcxNzU2MTZlNzQ2OTc0Nzk1ZjY2Njk2YzZjNjU2NDEzNjM2ZjZjNmM2MTc0NjU3MjYxNmM1ZjYxNzM3MzY1NzQ1ZjY5NjQwNDE1MWY3Yzc1MGM3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQwYjZlNmY1ZjYxNzM3MzY1NzQ1ZjY5NjQxMDY2NjU2NTVmNjI2MTczNjU1ZjcwNjU3MjYzNjU2ZTc0MDEwMDBjNjE3MzczNjU3NDVmNmM2OTczNzQ2NTY0MGI2NjY1NjU1ZjYxNjQ2NDcyNjU3MzczMDQ5NTRlN2Q3MjA0MzJjZTI4MWUwNGM5MWU4OGY1MDRkYjkyMmZjMjAwMDRiYTFkZWVmNTMxMWIyMjEyNDAwMGI2MzYxYTAwODAwNDQzZGI2MmExMTI0MDAwOWEzNjFhMDAyNzExMTI0MDAwODIzNjFhMDAyNzEyMTI0MDAwNmEzNjFhMDAyNzEzMTI0MDAwNTIzNjFhMDAyNzE0MTI0MDAwM2EzNjFhMDA4MDA0MTE5ZTNjNGIxMjQwMDAxZDM2MWEwMDgwMDQyNGMzZDIzNDEyNDAwMDAxMDAzMTE5MjUxMjMxMTgyMjEzMTA0NDg4MGMxNDIzNDMzMTE5ODEwNTEyMzExODIyMTMxMDQ0ODgwYmYwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYmM2MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjg5MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjUzMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0ODgwYjA5MjM0MzMxMTkyMjEyMzExODIyMTIxMDQ0ODgwYWU2MjM0MzMxMTkyMjEyNDAwMDAxMDAzMTE4MjIxMjQ0ODgwMTBjMjM0MzhhMDIwMThiZmU4YmZmMGEzNTA5OGJmZThiZmYxODgxZjQwMzBkNDAwMDAzMzQwOTg5MzQwOTIzMDg4OThhMDIwMThiZmU4YmZmYTIzNTExOGJmZThiZmZhYTE1MjIwZDQwMDAwMzM0MTE4OTM0MTEyMzE2YTA4OThhMDMwMThiZmQxNjM1MDI4YmZlMTYzNTAzMjQ4YmZlMDkxNjM1MDQzNDAyMzQwM2EzMzUwMjM0MDIzNDA0YTMzNTAyMzQwMjhiZmYxNmEzMzUwMjM0MDIyMTA1MTZhMjE3ODk4YTAzMDE4YmZkMTYzNTBlOGJmZTE2MzUwZjI0OGJmZTA5MTYzNTEwMzQwZTM0MGZhMzM1MGUzNDBlMzQxMGEzMzUwZTM0MGU4YmZmMTZhMzM1MGUzNDBlMjEwNTE2ODhmZjdlMTc4OThhMDIwMThiZmU4YmZmNjUzNTAxMzUwMDM0MDE0NDM0MDA4OThhMDEwMThiZmY3MjA4MzUwNjM1MDUzNDA2NDQzNDA1ODk4YTA0MDBiMTI1YjIxMDhiZmNiMjAwOGJmZGIyMTI4YmZlYjIxMThiZmZiMjE0YjM4OThhMDQwMDhiZmM4YmZlNzAwMDM1MDgzNTA3MzQwODQwMDAwZTMyMGE4YmZmOGJmZThiZmQ4OGZmY2E0MjAwMGIzMjBhOGJmZjhiZmU4YmZjODhmZmJjODk4YTAwMDAyNzBmMjI2NzI3MDcyMjY3MjgyMjY3MjcwNTI3MTU2NzI5MjI2NzJhMjI2NzI3MDYyMjY3MjcwODIyNjcyYjIyNjcyNzA0MjI2Nzg5OGEwMDAxMjIyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDUwMTIyMzEwMDMyMDkxMjQ0MzExMDgxMDYxMjQ0MzYxYTAwMjcxMTEyNDQ4YmZiNTcwMjAwMTcyMjEyOGJmYjU3MDIwMDE3MjMxMjExNDQ4YmZkNTcwMjAwMTcyMjEyOGJmZDU3MDIwMDE3MjMxMjExNDQ4YmZjNTcwMjAwMTcyMjBkNDQ4YmZjNTcwMjAwMTcyNDBjNDQ4YmZlNTcwMjAwMTcyMjBkNDQyNzBmMjJjMDMwNjcyODMyMGQ2NzI5OGJmYjU3MDIwMDE3NjcyYjhiZmQ1NzAyMDAxNzY3MjcwNjhiZmU1NzAyMDAxNzY3MjcwODIyNjcyYThiZmM1NzAyMDAxNzY3MjcwNTIzYzAxYzY3MjcwNDhiZmY1NzAyMDAxNzY3MzIwYTIyMjg2NDI3MDk4OGZlYzMzMjBhODhmZWUxMzIwYTIyMjg2NDI3MGI4OGZlYjQzMjBhODhmZWQyMzIwYTIyMjg2NDI3MGM4OGZlYTUzMjBhODhmZWMzMjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAwMzExNjIzMDgzODEwODEwNjEyNDQzMTE2MjMwODM5MWEwMDI3MTQxMjQ0MzExNjIzMDgzODE4OGJmZmMwMzIxMjQ0MzExNjgxMDIwODM4MTA4MTA2MTI0NDMxMTY4MTAyMDgzOTFhMDAyNzE2MTI0NDMxMTY4MTAyMDgzODE4Mjg2NDEyNDQzMTE2MjMwODM4MTkyMjEyNDQzMTE2ODEwMjA4MzgxOTIyMTI0NDg5OGEwNTAwOGJmYjhiZmM4YmZkOGJmZTg4ZmRjMzI4NjQyNzA5ODhmZTIyOGJmZjg4ZmU0MDg5OGEwMjAwMmE2NDhiZmUyYTg4ZmUxMThiZmUyNzA0ODhmZTBhMDkwZjQ0OGJmZTI3MDU4OGZlMDA4YmZlODhmZTBkMjg2NDI3MDk4OGZkZjQ4YmZmMmE2NDBiMjQwYThiZmYyYTY0Mjg2NDI3MGQ4OGZkZTI4OGZkNzkwOTg4ZmUxNzMyMGE4YmZmMmE2NDI4NjQyNzBkODhmZGNlMjg2NDI3MTA4OGZkYzc4OGZmOGQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZkYjg4YmZlMjcwNDg4ZmRiMTA4MGU0NDhiZmUyNzA1ODhmZGE3OGJmZTg4ZmRiNDI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGZkOTQ0MjAwMDcyODY0MjcwYzg4ZmQ4YThiZmY4OGZkYzE4OThhMDIwMDJhNjQ4YmZlMmE4OGZkNzkwODhiZmUyNzA0ODhmZDcxMDgyNDBmNDQzMjBhOGJmZjJhNjQwYjI0ODhmY2MwMjg2NDI3MDk4OGZkNWIyODY0ODhmZDY4ODhmZDc2ODk4YTAyMDAyYTY0OGJmZTJhODhmZDQ3OGJmZTI3MDQ4OGZkNDAwOTA4MjQwZTQ0MzIwYThiZmYyOTY0MjIxMjQwMDAwYTI4NjQyNzBiODhmZDI5NDIwMDA3Mjg2NDI3MGM4OGZkMWYyODY0ODhmZDJjODhmZDNhODk4YTAyMDEyMjhiZmU4OGZlN2M4YmZmMjcwNjY0MjcwODY0MDkwZTQ0MjcwNDY0MjIwZDQwMDE0ZDI3MDQ2NDIyMGQ0MDAxMzgyOTY0MjIxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmY2UxMjIxMjEwOGJmZWMwMzIyYjg4ZmNkNjIyMTIxMDI5NjQyMzEyMmI2NDIzMTIxMDhiZmVjMDMyMjk4OGZjYzIyMzEyMTA4YmZlYzAzMjJiODhmY2I3MjIxMjEwMTE0MDAwZWEyOTY0MjIxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzlmMjIxMjEwOGJmZWMwMzIyYjg4ZmM5NDIzMTIxMDI5NjQyMzEyMmI2NDIyMTIxMDhiZmVjMDMyMjk4OGZjODAyMzEyMTA4YmZlYzAzMjJiODhmYzc1MjMxMjEwMTE0MDAwOWMyOTY0MjIxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmYzVkMjMxMjEwOGJmZWMwMzIyYjg4ZmM1MjIzMTIxMDI5NjQyMzEyMmI2NDIzMTIxMDhiZmVjMDMyMjk4OGZjM2UyMjEyMTA4YmZlYzAzMjJiODhmYzMzMjMxMjEwMTE0MDAwNGUyOTY0MjIxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzFiMjMxMjEwOGJmZWMwMzIyYjg4ZmMxMDIyMTIxMDI5NjQyMzEyMmI2NDIyMTIxMDhiZmVjMDMyMjk4OGZiZmMyMjEyMTA4YmZlYzAzMjJiODhmYmYxMjIxMjEwMTE0MTAwNWE4YmZlYzAzMjhiZmY4OGZlOGY0MjAwNGU4YmZlYzAzMjhiZmY4OGZlNTE0MjAwNDI4YmZlYzAzMjhiZmY4OGZlMDY0MjAwMzY4YmZlYzAzMjhiZmY4OGZkYTE0MjAwMmEzMjA3MjcwNzY0ODE3ODA4MGM0NDQyZmViYjhiZmVjMDMyMjcwNDg4ZmJhNDIyMGQyNzA3NjQ4YmZlYzAzMjI3MDc4OGZiOTYwZTEwNDQ0MmZlOTYyNzA4MjcwODY0OGJmZjA4NjcyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDEwMDMxMTYyMzA5MzgxMDgxMDYxMjQ0MzExNjIzMDkzOTFhMDAyNzEyMTI0NDMxMTYyMzA5MzgxODhiZmYxMjQ0MzExNjIzMDgzODEwODEwNjEyNDQzMTE2MjMwODM5MWEwMDI3MTYxMjQ0MzExNjIzMDgzODE4Mjg2NDEyNDQzMTE2MjMwOTM5MWEwMjE3MjcwNjY0MjcwODY0MDkwZTQ0MzExNjIzMDkzODE5MjIxMjQ0MzExNjIzMDgzODE5MjIxMjQ0ODk4YTAyMDAyYTY0MjcwNDY0MDg4YmZlMmE4OGZiMDkwZjQ0OGJmZTI3MDU4OGZiMDA4YmZlODhmYjBkMjg2NDI3MDk4OGZhZjQ4YmZmOGJmZTJhODhmYWVjMGIyNDBhODhmYjIyMzIwYThiZmY4YmZlMmE4OGZhZGMyODY0MjcwZDg4ZmFkNTI4NjQyNzEwODhmYWNlODhmYzk0ODk4YTAyMDAyYTY0MjcwNDY0MDk4YmZlMmE4OGZhYmIwZTQ0OGJmZTI3MDU4OGZhYjI4YmZlODhmYWJmMjk2NDIyMTI0MDAwMGEyODY0MjcwYjg4ZmE5ZjQyMDAwNzI4NjQyNzBjODhmYTk1OGJmZjg4ZmFjYzg5OGEwMjAwMmE2NDhiZmUyYTg4ZmE4NDA4MjcwNDY0MDgyNDBmNDQyYTY0MjcwNDY0MDgyNDhiZmUyYTg4ZmE2ZjA5MGQ0MDAwMGIyYTY0MjcwNDY0MDgzNTEyNDIwMDBhMjQ4YmZlMmE4OGZhIC8vIDB4MDgyMDA2MDAwMWMwODQzZDA0ODAwMjgwODA5MGJiYmFkNmFkZjAwZDI2MTcwZDZkNjE3MjZiNjU3NDVmNjE3MDcwNWY2OTY0MDg3MDZmNzM2OTc0Njk2ZjZlMDU3MDcyNjk2MzY1MDQ3MzY5NjQ2NTA4NzM2YzY5NzA3MDYxNjc2NTA1NmY3NzZlNjU3MjA4NzE3NTYxNmU3NDY5NzQ3OTBmNjY2NTY1NWY3NDY5NmQ2NTcyNWY3Mzc0NjE3Mjc0MGY3MTc1NjE2ZTc0Njk3NDc5NWY2NjY5NmM2YzY1NjQxMzYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0MDQxNTFmN2M3NTBjNzk2NTczNWY2MTczNzM2NTc0NWY2OTY0MGI2ZTZmNWY2MTczNzM2NTc0NWY2OTY0MTA2NjY1NjU1ZjYyNjE3MzY1NWY3MDY1NzI2MzY1NmU3NDAxMDAwYzYxNzM3MzY1NzQ1ZjZjNjk3Mzc0NjU2NDBiNjY2NTY1NWY2MTY0NjQ3MjY1NzM3MzA0OTU0ZTdkNzIwNDMyY2UyODFlMDRjOTFlODhmNTA0ZGI5MjJmYzIwMDA0YmExZGVlZjUzMTFiMjIxMjQwMDBiNjM2MWEwMDgwMDQ0M2RiNjJhMTEyNDAwMDlhMzYxYTAwMjcxMTEyNDAwMDgyMzYxYTAwMjcxMjEyNDAwMDZhMzYxYTAwMjcxMzEyNDAwMDUyMzYxYTAwMjcxNDEyNDAwMDNhMzYxYTAwODAwNDExOWUzYzRiMTI0MDAwMWQzNjFhMDA4MDA0MjRjM2QyMzQxMjQwMDAwMTAwMzExOTI1MTIzMTE4MjIxMzEwNDQ4ODBjMTQyMzQzMzExOTgxMDUxMjMxMTgyMjEzMTA0NDg4MGJmMDIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGJjNjIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGI4OTIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGI1MzIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDg4MGIwOTIzNDMzMTE5MjIxMjMxMTgyMjEyMTA0NDg4MGFlNjIzNDMzMTE5MjIxMjQwMDAwMTAwMzExODIyMTI0NDg4MDEwYzIzNDM4YTAyMDE4YmZlOGJmZjBhMzUwOThiZmU4YmZmMTg4MWY0MDMwZDQwMDAwMzM0MDk4OTM0MDkyMzA4ODk4YTAyMDE4YmZlOGJmZmEyMzUxMThiZmU4YmZmYWExNTIyMGQ0MDAwMDMzNDExODkzNDExMjMxNmEwODk4YTAzMDE4YmZkMTYzNTAyOGJmZTE2MzUwMzI0OGJmZTA5MTYzNTA0MzQwMjM0MDNhMzM1MDIzNDAyMzQwNGEzMzUwMjM0MDI4YmZmMTZhMzM1MDIzNDAyMjEwNTE2YTIxNzg5OGEwMzAxOGJmZDE2MzUwZThiZmUxNjM1MGYyNDhiZmUwOTE2MzUxMDM0MGUzNDBmYTMzNTBlMzQwZTM0MTBhMzM1MGUzNDBlOGJmZjE2YTMzNTBlMzQwZTIxMDUxNjg4ZmY3ZTE3ODk4YTAyMDE4YmZlOGJmZjY1MzUwMTM1MDAzNDAxNDQzNDAwODk4YTAxMDE4YmZmNzIwODM1MDYzNTA1MzQwNjQ0MzQwNTg5OGEwNDAwYjEyNWIyMTA4YmZjYjIwMDhiZmRiMjEyOGJmZWIyMTE4YmZmYjIxNGIzODk4YTA0MDA4YmZjOGJmZTcwMDAzNTA4MzUwNzM0MDg0MDAwMGUzMjBhOGJmZjhiZmU4YmZkODhmZmNhNDIwMDBiMzIwYThiZmY4YmZlOGJmYzg4ZmZiYzg5OGEwMDAwMjcwZjIyNjcyNzA3MjI2NzI4MjI2NzI3MDUyNzE1NjcyOTIyNjcyYTIyNjcyNzA2MjI2NzI3MDgyMjY3MmIyMjY3MjcwNDIyNjc4OThhMDAwMTIyMjM4YzAwOGIwMDIxMDQwYzQ0ODk4YTA1MDEyMjMxMDAzMjA5MTI0NDMxMTA4MTA2MTI0NDM2MWEwMDI3MTExMjQ0OGJmYjU3MDIwMDE3MjIxMjhiZmI1NzAyMDAxNzIzMTIxMTQ0OGJmZDU3MDIwMDE3MjIxMjhiZmQ1NzAyMDAxNzIzMTIxMTQ0OGJmYzU3MDIwMDE3MjIwZDQ0OGJmYzU3MDIwMDE3MjQwYzQ0OGJmZTU3MDIwMDE3MjIwZDQ0MjcwZjIyYzAzMDY3MjgzMjBkNjcyOThiZmI1NzAyMDAxNzY3MmI4YmZkNTcwMjAwMTc2NzI3MDY4YmZlNTcwMjAwMTc2NzI3MDgyMjY3MmE4YmZjNTcwMjAwMTc2NzI3MDUyM2MwMWM2NzI3MDQ4YmZmNTcwMjAwMTc2NzMyMGEyMjI4NjQyNzA5ODhmZWMzMzIwYTg4ZmVlMTMyMGEyMjI4NjQyNzBiODhmZWI0MzIwYTg4ZmVkMjMyMGEyMjI4NjQyNzBjODhmZWE1MzIwYTg4ZmVjMzI3MDczMjA3NjcyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDEwMDMxMTYyMzA4MzgxMDgxMDYxMjQ0MzExNjIzMDgzOTFhMDAyNzE0MTI0NDMxMTYyMzA4MzgxODhiZmZjMDMyMTI0NDMxMTY4MTAyMDgzODEwODEwNjEyNDQzMTE2ODEwMjA4MzkxYTAwMjcxNjEyNDQzMTE2ODEwMjA4MzgxODI4NjQxMjQ0MzExNjIzMDgzODE5MjIxMjQ0MzExNjgxMDIwODM4MTkyMjEyNDQ4OThhMDUwMDhiZmI4YmZjOGJmZDhiZmU4OGZkYzMyODY0MjcwOTg4ZmUyMjhiZmY4OGZlNDA4OThhMDIwMDJhNjQ4YmZlMmE4OGZlMTE4YmZlMjcwNDg4ZmUwYTA5MGY0NDhiZmUyNzA1ODhmZTAwOGJmZTg4ZmUwZDI4NjQyNzA5ODhmZGY0OGJmZjJhNjQwYjI0MGE4YmZmMmE2NDI4NjQyNzBkODhmZGUyODhmZDc5MDk4OGZlMTczMjBhOGJmZjJhNjQyODY0MjcwZDg4ZmRjZTI4NjQyNzEwODhmZGM3ODhmZjhkODk4YTAyMDAyYTY0OGJmZTJhODhmZGI4OGJmZTI3MDQ4OGZkYjEwODBlNDQ4YmZlMjcwNTg4ZmRhNzhiZmU4OGZkYjQyOTY0MjIxMjQwMDAwYTI4NjQyNzBiODhmZDk0NDIwMDA3Mjg2NDI3MGM4OGZkOGE4YmZmODhmZGMxODk4YTAyMDAyYTY0OGJmZTJhODhmZDc5MDg4YmZlMjcwNDg4ZmQ3MTA4MjQwZjQ0MzIwYThiZmYyYTY0MGIyNDg4ZmNjMDI4NjQyNzA5ODhmZDViMjg2NDg4ZmQ2ODg4ZmQ3Njg5OGEwMjAwMmE2NDhiZmUyYTg4ZmQ0NzhiZmUyNzA0ODhmZDQwMDkwODI0MGU0NDMyMGE4YmZmMjk2NDIyMTI0MDAwMGEyODY0MjcwYjg4ZmQyOTQyMDAwNzI4NjQyNzBjODhmZDFmMjg2NDg4ZmQyYzg4ZmQzYTg5OGEwMjAxMjI4YmZlODhmZTdjOGJmZjI3MDY2NDI3MDg2NDA5MGU0NDI3MDQ2NDIyMGQ0MDAxNGQyNzA0NjQyMjBkNDAwMTM4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZWMwMzIyOTg4ZmNlMTIyMTIxMDhiZmVjMDMyMmI4OGZjZDYyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmY2MyMjMxMjEwOGJmZWMwMzIyYjg4ZmNiNzIyMTIxMDExNDAwMGVhMjk2NDIyMTIyYjY0MjIxMjEwOGJmZWMwMzIyOTg4ZmM5ZjIyMTIxMDhiZmVjMDMyMmI4OGZjOTQyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYzgwMjMxMjEwOGJmZWMwMzIyYjg4ZmM3NTIzMTIxMDExNDAwMDljMjk2NDIyMTIyYjY0MjMxMjEwOGJmZWMwMzIyOTg4ZmM1ZDIzMTIxMDhiZmVjMDMyMmI4OGZjNTIyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZlYzAzMjI5ODhmYzNlMjIxMjEwOGJmZWMwMzIyYjg4ZmMzMzIzMTIxMDExNDAwMDRlMjk2NDIyMTIyYjY0MjIxMjEwOGJmZWMwMzIyOTg4ZmMxYjIzMTIxMDhiZmVjMDMyMmI4OGZjMTAyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZlYzAzMjI5ODhmYmZjMjIxMjEwOGJmZWMwMzIyYjg4ZmJmMTIyMTIxMDExNDEwMDVhOGJmZWMwMzI4YmZmODhmZThmNDIwMDRlOGJmZWMwMzI4YmZmODhmZTUxNDIwMDQyOGJmZWMwMzI4YmZmODhmZTA2NDIwMDM2OGJmZWMwMzI4YmZmODhmZGExNDIwMDJhMzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYmI4YmZlYzAzMjI3MDQ4OGZiYTQyMjBkMjcwNzY0OGJmZWMwMzIyNzA3ODhmYjk2MGUxMDQ0NDJmZTk2MjcwODI3MDg2NDhiZmYwODY3MjM4YzAwOGIwMDIxMDQwYzQ0ODk4YTAxMDAzMTE2MjMwOTM4MTA4MTA2MTI0NDMxMTYyMzA5MzkxYTAwMjcxMjEyNDQzMTE2MjMwOTM4MTg4YmZmMTI0NDMxMTYyMzA4MzgxMDgxMDYxMjQ0MzExNjIzMDgzOTFhMDAyNzE2MTI0NDMxMTYyMzA4MzgxODI4NjQxMjQ0MzExNjIzMDkzOTFhMDIxNzI3MDY2NDI3MDg2NDA5MGU0NDMxMTYyMzA5MzgxOTIyMTI0NDMxMTYyMzA4MzgxOTIyMTI0NDg5OGEwMjAwMmE2NDI3MDQ2NDA4OGJmZTJhODhmYjA5MGY0NDhiZmUyNzA1ODhmYjAwOGJmZTg4ZmIwZDI4NjQyNzA5ODhmYWY0OGJmZjhiZmUyYTg4ZmFlYzBiMjQwYTg4ZmIyMjMyMGE4YmZmOGJmZTJhODhmYWRjMjg2NDI3MGQ4OGZhZDUyODY0MjcxMDg4ZmFjZTg4ZmM5NDg5OGEwMjAwMmE2NDI3MDQ2NDA5OGJmZTJhODhmYWJiMGU0NDhiZmUyNzA1ODhmYWIyOGJmZTg4ZmFiZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGZhOWY0MjAwMDcyODY0MjcwYzg4ZmE5NThiZmY4OGZhY2M4OThhMDIwMDJhNjQ4YmZlMmE4OGZhODQwODI3MDQ2NDA4MjQwZjQ0MmE2NDI3MDQ2NDA4MjQ4YmZlMmE4OGZhNmYwOTBkNDAwMDBiMmE2NDI3MDQ2NDA4MzUxMjQyMDAwYTI0OGJmZTJhODhmYQppdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCnB1c2hieXRlcyAweDU4MDkzNTEyMzIwYThiZmYzNDEyMGIyNDg4ZjlhODI4NjQyNzA5ODhmYTQzMjg2NDg4ZmE1MDg4ZmE1ZTMyMGE4YmZmMzQxMjI4NjQyNzBkODhmYTJlMjg2NDI3MTA4OGZhMjc4OGZiZWQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZhMTgwODI3MDQ2NDA5MjQwZTQ0MmE2NDI3MDQ2NDA5MjQ4YmZlMmE4OGZhMDMwOTBjNDAwMDI5MjQ4YmZlMmE4OGY5ZjcwOTM1MTMzMjBhOGJmZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGY5ZTI0MjAwMTUyODY0MjcwYzg4ZjlkODQyMDAwYjJhNjQyNzA0NjQwOTM1MTM0MmZmZDYyODY0ODhmOWQ3ODhmOWU1ODk4YTAzMDEyMjMxMTA4MTA2MTI0NDM2MWEwMDI3MTMxMjQ0MzEwMDI3MDU2NDEyNDQyNzA4NjQyMjEyNDQ4YmZkMjIwZDQ0OGJmZDI0MGM0NDhiZmUyMjBkNDQ4YmZkMmE2NDEzOGJmZTI3MDY2NDEzMTE4YmZmMjcwNDY0MTMxMTQ0MmI2NDIzMTI0MDAwNmMyNzBmNjQzNTBkOGJmZTI3MDY2NDBkNDAwMDFkMjcwNjY0OGJmZTA5MzUwYzM0MGMyMjBkNDEwMGZhMzIwYTM0MGMzNDBkMzEwMDg4Zjk3NDQyMDBlYzhiZmUyNzA2NjQwOTM1MGMzMTE2MjIwZDQ0MzExNjIzMDkzODEwMjUxMjQ0MzExNjIzMDkzODAwMzEwMDEyNDQzMTE2MjMwOTM4MTQzMjBhMTI0NDMxMTYyMzA5MzgxMTM0MGQxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQ0MjAwYWIyNzA2NjQyYTY0MjcwNDY0MDgwYjI0MGEyNzA2NjQyYTY0MjcwNDY0MDgyODY0MjcwZDg4ZjhmMTg4ZjhiYTA4MzUwYThiZmU4YmZkOGJmZjA4MGIyNDBhOGJmZThiZmQ4YmZmMDgyODY0MjcwZDg4ZjhkMzg4Zjg5YzA4MzUwYjM0MGIzNDBhMGQ0MDAwMjEzNDBhMzQwYjA5MzUwYzM0MGMyMjBkNDEwMDU1MzIwYTM0MGMyODY0MjcwOTg4ZjhhYzMxMDA4OGY4Y2E0MjAwNDIzNDBiMzQwYTA5MzUwYzMxMTYyMjBkNDQzMTE2MjMwOTM4MTAyNTEyNDQzMTE2MjMwOTM4MDAzMTAwMTI0NDMxMTYyMzA5MzgxNDMyMGExMjQ0MzExNjIzMDkzODExMjg2NDI3MDk4OGY4NmUxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQyYThiZmQ2NzI3MDY4YmZlNjcyNzA0OGJmZjY3MjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAxMjI4YmZmYzAzMjg4ZmNiZDhiZmZjMDMyMjcwNDg4ZjgzMTIyMGQ0MDAxNjUyNzA0NjQyMjBkNDAwMTUwMjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4ZjgxMzIyMTIxMDhiZmZjMDMyMmI4OGY4MDgyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmN2Y0MjMxMjEwOGJmZmMwMzIyYjg4ZjdlOTIyMTIxMDExNDAwMGZjMjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4ZjdkMTIyMTIxMDhiZmZjMDMyMmI4OGY3YzYyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmN2IyMjMxMjEwOGJmZmMwMzIyYjg4ZjdhNzIzMTIxMDExNDAwMGE4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4Zjc4ZjIzMTIxMDhiZmZjMDMyMmI4OGY3ODQyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmNzcwMjIxMjEwOGJmZmMwMzIyYjg4Zjc2NTIzMTIxMDExNDAwMDU0Mjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4Zjc0ZDIzMTIxMDhiZmZjMDMyMmI4OGY3NDIyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmNzJlMjIxMjEwOGJmZmMwMzIyYjg4ZjcyMzIyMTIxMDExNDEwMDZjOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmY2VhNDIwMDVhOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzZjNDIwMDQ4OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzFmNDIwMDM2OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYmJmNDIwMDI0MzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYTMyNzA0NjQyMjBkOGJmZmMwMzIyNzA3ODhmNmI5MjcwNzY0MGUxMDQ0NDJmZTg0MjcwODI3MDg2NDMxMTYyMzA5MzkxYTAyMTcwODY3MjM4YzAwODk4YTAwMDEyMjMxMDAzMjA5MTIzMTAwMjg2NDgwMTU2NTczNjM3MjZmNzc1ZjYzNjE2ZTYzNjU2YzVmNjE2NDY0NzI2NTczNzM4OGY2NzYxMjExNDRiMTI1YjIxMDI4NjQyNzA5ODhmNjY4YjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBiODhmNjRhYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBjODhmNjJjYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTIzYjIxMDIyYjIwODI3MDU2NGIyMDcyMmIyMDEyNzA1NjRiMjA5YjMyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDAwMTIyMzEwMDI4NjQ4MDEyNmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyODhmNWRiMTIzMjA0MjMxMjEwNDQyMzhjMDA4OThhMDAwMDIyODhmNjVhOGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjI3MTU0NzA0MzYxYTAxOGMwMTM2MWEwMjhjMDIzNjFhMDM4YzAzMzYxYTA0OGMwNDM2MWEwNThjMDU4YjAxOGIwMjhiMDM4YjA0OGIwNTg4ZjYyZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAyMzYxYTAxMjI1NThjMDEzNjFhMDIxNzhjMDI4YjAxOGIwMjg4Zjg1MThjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAzMzYxYTAxMTc4YzAxMzYxYTAyMTc4YzAyMzYxYTAzMTc4YzAzOGIwMThiMDI4YjAzODhmYjc4OGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjQ5MzYxYTAxMjI1NThjMDE4YjAxODhmY2Q2OGMwMDI3MGE4YjAwMTY1MGIwODk4YTAwMDAyMjg4ZmU2ZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI4OGZlZmM4YzAwMjcwYThiMDAxNjUwYjA4OSAvLyAweDU4MDkzNTEyMzIwYThiZmYzNDEyMGIyNDg4ZjlhODI4NjQyNzA5ODhmYTQzMjg2NDg4ZmE1MDg4ZmE1ZTMyMGE4YmZmMzQxMjI4NjQyNzBkODhmYTJlMjg2NDI3MTA4OGZhMjc4OGZiZWQ4OThhMDIwMDJhNjQ4YmZlMmE4OGZhMTgwODI3MDQ2NDA5MjQwZTQ0MmE2NDI3MDQ2NDA5MjQ4YmZlMmE4OGZhMDMwOTBjNDAwMDI5MjQ4YmZlMmE4OGY5ZjcwOTM1MTMzMjBhOGJmZjI5NjQyMjEyNDAwMDBhMjg2NDI3MGI4OGY5ZTI0MjAwMTUyODY0MjcwYzg4ZjlkODQyMDAwYjJhNjQyNzA0NjQwOTM1MTM0MmZmZDYyODY0ODhmOWQ3ODhmOWU1ODk4YTAzMDEyMjMxMTA4MTA2MTI0NDM2MWEwMDI3MTMxMjQ0MzEwMDI3MDU2NDEyNDQyNzA4NjQyMjEyNDQ4YmZkMjIwZDQ0OGJmZDI0MGM0NDhiZmUyMjBkNDQ4YmZkMmE2NDEzOGJmZTI3MDY2NDEzMTE4YmZmMjcwNDY0MTMxMTQ0MmI2NDIzMTI0MDAwNmMyNzBmNjQzNTBkOGJmZTI3MDY2NDBkNDAwMDFkMjcwNjY0OGJmZTA5MzUwYzM0MGMyMjBkNDEwMGZhMzIwYTM0MGMzNDBkMzEwMDg4Zjk3NDQyMDBlYzhiZmUyNzA2NjQwOTM1MGMzMTE2MjIwZDQ0MzExNjIzMDkzODEwMjUxMjQ0MzExNjIzMDkzODAwMzEwMDEyNDQzMTE2MjMwOTM4MTQzMjBhMTI0NDMxMTYyMzA5MzgxMTM0MGQxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQ0MjAwYWIyNzA2NjQyYTY0MjcwNDY0MDgwYjI0MGEyNzA2NjQyYTY0MjcwNDY0MDgyODY0MjcwZDg4ZjhmMTg4ZjhiYTA4MzUwYThiZmU4YmZkOGJmZjA4MGIyNDBhOGJmZThiZmQ4YmZmMDgyODY0MjcwZDg4ZjhkMzg4Zjg5YzA4MzUwYjM0MGIzNDBhMGQ0MDAwMjEzNDBhMzQwYjA5MzUwYzM0MGMyMjBkNDEwMDU1MzIwYTM0MGMyODY0MjcwOTg4ZjhhYzMxMDA4OGY4Y2E0MjAwNDIzNDBiMzQwYTA5MzUwYzMxMTYyMjBkNDQzMTE2MjMwOTM4MTAyNTEyNDQzMTE2MjMwOTM4MDAzMTAwMTI0NDMxMTYyMzA5MzgxNDMyMGExMjQ0MzExNjIzMDkzODExMjg2NDI3MDk4OGY4NmUxMjQ0MzExNjIzMDkzODEyMzQwYzEyNDQyYThiZmQ2NzI3MDY4YmZlNjcyNzA0OGJmZjY3MjcwNzMyMDc2NzIzOGMwMDhiMDAyMTA0MGM0NDg5OGEwMTAxMjI4YmZmYzAzMjg4ZmNiZDhiZmZjMDMyMjcwNDg4ZjgzMTIyMGQ0MDAxNjUyNzA0NjQyMjBkNDAwMTUwMjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4ZjgxMzIyMTIxMDhiZmZjMDMyMmI4OGY4MDgyMjEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmN2Y0MjMxMjEwOGJmZmMwMzIyYjg4ZjdlOTIyMTIxMDExNDAwMGZjMjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4ZjdkMTIyMTIxMDhiZmZjMDMyMmI4OGY3YzYyMzEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmN2IyMjMxMjEwOGJmZmMwMzIyYjg4ZjdhNzIzMTIxMDExNDAwMGE4Mjk2NDIyMTIyYjY0MjMxMjEwOGJmZmMwMzIyOTg4Zjc4ZjIzMTIxMDhiZmZjMDMyMmI4OGY3ODQyMzEyMTAyOTY0MjMxMjJiNjQyMzEyMTA4YmZmYzAzMjI5ODhmNzcwMjIxMjEwOGJmZmMwMzIyYjg4Zjc2NTIzMTIxMDExNDAwMDU0Mjk2NDIyMTIyYjY0MjIxMjEwOGJmZmMwMzIyOTg4Zjc0ZDIzMTIxMDhiZmZjMDMyMmI4OGY3NDIyMjEyMTAyOTY0MjMxMjJiNjQyMjEyMTA4YmZmYzAzMjI5ODhmNzJlMjIxMjEwOGJmZmMwMzIyYjg4ZjcyMzIyMTIxMDExNDEwMDZjOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmY2VhNDIwMDVhOGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzZjNDIwMDQ4OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYzFmNDIwMDM2OGJmZmMwMzIzMTE2MjMwOTM5MWEwMjE3ODhmYmJmNDIwMDI0MzIwNzI3MDc2NDgxNzgwODBjNDQ0MmZlYTMyNzA0NjQyMjBkOGJmZmMwMzIyNzA3ODhmNmI5MjcwNzY0MGUxMDQ0NDJmZTg0MjcwODI3MDg2NDMxMTYyMzA5MzkxYTAyMTcwODY3MjM4YzAwODk4YTAwMDEyMjMxMDAzMjA5MTIzMTAwMjg2NDgwMTU2NTczNjM3MjZmNzc1ZjYzNjE2ZTYzNjU2YzVmNjE2NDY0NzI2NTczNzM4OGY2NzYxMjExNDRiMTI1YjIxMDI4NjQyNzA5ODhmNjY4YjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBiODhmNjRhYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTI1YjIxMDI4NjQyNzBjODhmNjJjYjIxMTI3MDU2NGIyMTQyMmIyMDEyMmIyMTIyNzA1NjRiMjE1YjNiMTIzYjIxMDIyYjIwODI3MDU2NGIyMDcyMmIyMDEyNzA1NjRiMjA5YjMyMzhjMDA4YjAwMjEwNDBjNDQ4OThhMDAwMTIyMzEwMDI4NjQ4MDEyNmQ2MTcyNmI2NTc0NWY2NjcyNjk2NTZlNjQ1ZjYxNjQ2NDcyODhmNWRiMTIzMjA0MjMxMjEwNDQyMzhjMDA4OThhMDAwMDIyODhmNjVhOGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjI3MTU0NzA0MzYxYTAxOGMwMTM2MWEwMjhjMDIzNjFhMDM4YzAzMzYxYTA0OGMwNDM2MWEwNThjMDU4YjAxOGIwMjhiMDM4YjA0OGIwNTg4ZjYyZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAyMzYxYTAxMjI1NThjMDEzNjFhMDIxNzhjMDI4YjAxOGIwMjg4Zjg1MThjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI0NzAzMzYxYTAxMTc4YzAxMzYxYTAyMTc4YzAyMzYxYTAzMTc4YzAzOGIwMThiMDI4YjAzODhmYjc4OGMwMDI3MGEyNzBlMjI4YjAwNTY1MGIwODk4YTAwMDAyMjQ5MzYxYTAxMjI1NThjMDE4YjAxODhmY2Q2OGMwMDI3MGE4YjAwMTY1MGIwODk4YTAwMDAyMjg4ZmU2ZDhjMDAyNzBhMjcwZTIyOGIwMDU2NTBiMDg5OGEwMDAwMjI4OGZlZmM4YzAwMjcwYThiMDAxNjUwYjA4OQppdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCnB1c2hieXRlcyAweDA4ODEwMDQzIC8vIDB4MDg4MTAwNDMKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCmludGNfMCAvLyAxCml0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKaW50Y18wIC8vIDEKaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKcHVzaGludCA5IC8vIDkKaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50Cml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKc3RvcmUgMTMKbG9hZCAxMwpmcmFtZV9idXJ5IDAKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMyAvLyAieWVzX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQpibnogY3JlYXRlZXNjcm93XzE0X2w0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAo9PQpibnogY3JlYXRlZXNjcm93XzE0X2wzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKKwoqCmludGMgNCAvLyAxMDAwMDAwCi8KZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKKwpieXRlYyAxNSAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBjYWxjdWxhdGVmZWVjb21taXRfMgorCj09CmFzc2VydApsb2FkIDEzCmZyYW1lX2RpZyAtNApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMQpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIHNldHVwZXNjcm93XzEzCmIgY3JlYXRlZXNjcm93XzE0X2w1CmNyZWF0ZWVzY3Jvd18xNF9sMzoKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApmcmFtZV9kaWcgLTMKPT0KYXNzZXJ0CmxvYWQgMTMKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMSAvLyAwCmludGNfMSAvLyAwCmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIHNldHVwZXNjcm93XzEzCmIgY3JlYXRlZXNjcm93XzE0X2w1CmNyZWF0ZWVzY3Jvd18xNF9sNDoKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApmcmFtZV9kaWcgLTMKPT0KYXNzZXJ0CmxvYWQgMTMKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMCAvLyAxCmludGNfMSAvLyAwCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZXR1cGVzY3Jvd18xMwpjcmVhdGVlc2Nyb3dfMTRfbDU6CnJldHN1YgoKLy8gYWN0aXZhdGVfbWFya2V0CmFjdGl2YXRlbWFya2V0XzE1Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECmNhbGxzdWIgaXRvYV8xMgpzdG9yZSAxNApieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMAo9PQphc3NlcnQKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjIDIzIC8vICJBbHBoYSBNYXJrZXQgIgpsb2FkIDE0CmNvbmNhdApwdXNoYnl0ZXMgMHgyMDU5NjU3MyAvLyAiIFllcyIKY29uY2F0Cml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmJ5dGVjIDI0IC8vICJodHRwczovL3d3dy5hbHBoYWFyY2FkZS5jb20vbWFya2V0LyIKbG9hZCAxNApjb25jYXQKaXR4bl9maWVsZCBDb25maWdBc3NldFVSTApwdXNoaW50IDYgLy8gNgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKaW50YyA2IC8vIDE4NDQ2NzQ0MDczNzA5NTUxNjE1Cml0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgpwdXNoYnl0ZXMgMHg0MTRjNTA0ODQxMmQ1OSAvLyAiQUxQSEEtWSIKaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCml0eG5fc3VibWl0CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKaXR4biBDcmVhdGVkQXNzZXRJRAphcHBfZ2xvYmFsX3B1dAppdHhuX2JlZ2luCnB1c2hpbnQgMyAvLyBhY2ZnCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWMgMjMgLy8gIkFscGhhIE1hcmtldCAiCmxvYWQgMTQKY29uY2F0CnB1c2hieXRlcyAweDIwNGU2ZiAvLyAiIE5vIgpjb25jYXQKaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKYnl0ZWMgMjQgLy8gImh0dHBzOi8vd3d3LmFscGhhYXJjYWRlLmNvbS9tYXJrZXQvIgpsb2FkIDE0CmNvbmNhdAppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCnB1c2hpbnQgNiAvLyA2Cml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwppbnRjIDYgLy8gMTg0NDY3NDQwNzM3MDk1NTE2MTUKaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCnB1c2hieXRlcyAweDQxNGM1MDQ4NDEyZDRlIC8vICJBTFBIQS1OIgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKaXR4bl9zdWJtaXQKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCml0eG4gQ3JlYXRlZEFzc2V0SUQKYXBwX2dsb2JhbF9wdXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaW50Y18xIC8vIDAKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyAxNCAvLyAiaXNfYWN0aXZhdGVkIgppbnRjXzAgLy8gMQphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgppbnRjXzEgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmludGNfMSAvLyAwCmFwcF9nbG9iYWxfcHV0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gdmFsaWRhdGVfbWF0Y2hfZ3JvdXBfc3RydWN0dXJlCnZhbGlkYXRlbWF0Y2hncm91cHN0cnVjdHVyZV8xNjoKcHJvdG8gMiAwCmJ5dGVjIDE0IC8vICJpc19hY3RpdmF0ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmFzc2VydApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGRiOTIyZmMyIC8vICJtYXRjaF90YWtlcihhcHBsaWNhdGlvbil1aW50NjQiCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIC0xCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzIgLy8gMgotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzMmNlMjgxZSAvLyAibWF0Y2hfbWFrZXIoYXBwbGljYXRpb24sdWludDY0KXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE5vT3AKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMSAvLyBOb09wCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gTm9PcAo9PQphc3NlcnQKcmV0c3ViCgovLyB2YWxpZGF0ZV9tYXJrZXRfY29uc2lzdGVuY3kKdmFsaWRhdGVtYXJrZXRjb25zaXN0ZW5jeV8xNzoKcHJvdG8gMiAwCmZyYW1lX2RpZyAtMgpieXRlYyAxNiAvLyAibWFya2V0X2FwcF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0xCmJ5dGVjIDE2IC8vICJtYXJrZXRfYXBwX2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo9PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDE2IC8vICJtYXJrZXRfYXBwX2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQpieXRlYyAxNiAvLyAibWFya2V0X2FwcF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECj09CmFzc2VydApyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYmlkX2NvbXBsZW1lbnRfbWF0Y2gKaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4Ogpwcm90byAzIDAKZnJhbWVfZGlnIC0yCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKKwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMworCmludGMgNCAvLyAxMDAwMDAwCj49CmFzc2VydApmcmFtZV9kaWcgLTMKYnl0ZWMgMTMgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTMKY2FsbHN1YiBnZXRhcHBhZGRyXzQKZnJhbWVfZGlnIC0zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQpibnogaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w1CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2wyOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzgKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0yCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KYm56IGhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w2CmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNDoKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2w2CmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNToKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmIgaGFuZGxlYmlkYmlkY29tcGxlbWVudG1hdGNoXzE4X2wyCmhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOF9sNjoKZnJhbWVfZGlnIC0xCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl84CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQorCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKKwphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGhhbmRsZV9hc2tfYXNrX2NvbXBsZW1lbnRfbWF0Y2gKaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5Ogpwcm90byAzIDAKZnJhbWVfZGlnIC0yCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmJ5dGVjIDEwIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKKwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCmludGMgNCAvLyAxMDAwMDAwCjw9CmFzc2VydApmcmFtZV9kaWcgLTIKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCmludGMgNCAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMwpieXRlYyAxMCAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8zCi0KPApibnogaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5X2wyCmludGMgNCAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMwpieXRlYyAxMCAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8zCi0Kc3RvcmUgMTcKYiBoYW5kbGVhc2thc2tjb21wbGVtZW50bWF0Y2hfMTlfbDMKaGFuZGxlYXNrYXNrY29tcGxlbWVudG1hdGNoXzE5X2wyOgpmcmFtZV9kaWcgLTIKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwpmcmFtZV9kaWcgLTIKYnl0ZWMgMTcgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwotCnN0b3JlIDE3CmhhbmRsZWFza2Fza2NvbXBsZW1lbnRtYXRjaF8xOV9sMzoKZnJhbWVfZGlnIC0zCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0zCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTMKYnl0ZWMgMTAgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwoqCmludGMgNCAvLyAxMDAwMDAwCi8KY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzgKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0yCmNhbGxzdWIgZ2V0YXBwYWRkcl80CmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQpsb2FkIDE3CioKaW50YyA0IC8vIDEwMDAwMDAKLwpmcmFtZV9kaWcgLTEKbG9hZCAxNwpieXRlYyAxNSAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMQotCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl84Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpsb2FkIDE3CmJ5dGVjIDE1IC8vICJmZWVfYmFzZV9wZXJjZW50IgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGNhbGN1bGF0ZWZlZV8xCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDIxIC8vICJmZWVfYWRkcmVzcyIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKLQphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0xCi0KYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBwcm9jZXNzX3BvdGVudGlhbF9tYXRjaApwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjA6CnByb3RvIDIgMQppbnRjXzEgLy8gMApmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiB2YWxpZGF0ZW1hdGNoZ3JvdXBzdHJ1Y3R1cmVfMTYKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmNhbGxzdWIgdmFsaWRhdGVtYXJrZXRjb25zaXN0ZW5jeV8xNwpieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiBnZXRhcHBjcmVhdG9yXzUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiBnZXRhcHBjcmVhdG9yXzUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWMgMjUgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAyNSAvLyAiZmVlX3RpbWVyX3N0YXJ0IgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA2IC8vICJwb3NpdGlvbiIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18xIC8vIDAKPT0KJiYKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaW50Y18wIC8vIDEKPT0KJiYKfHwKYm56IHByb2Nlc3Nwb3RlbnRpYWxtYXRjaF8yMF9sMwpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzAgLy8gMQo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzAgLy8gMQo9PQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDYgLy8gInBvc2l0aW9uIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJzaWRlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwppbnRjXzEgLy8gMAo9PQomJgp8fApieiBwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKY2FsbHN1YiBoYW5kbGVhc2thc2tjb21wbGVtZW50bWF0Y2hfMTkKYiBwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQKcHJvY2Vzc3BvdGVudGlhbG1hdGNoXzIwX2wzOgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhuc2EgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpjYWxsc3ViIGhhbmRsZWJpZGJpZGNvbXBsZW1lbnRtYXRjaF8xOApwcm9jZXNzcG90ZW50aWFsbWF0Y2hfMjBfbDQ6CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gcmVzb2x2ZV9tYXJrZXQKcmVzb2x2ZW1hcmtldF8yMToKcHJvdG8gMSAxCmludGNfMSAvLyAwCnR4biBTZW5kZXIKYnl0ZWMgMjAgLy8gIm9yYWNsZV9hZGRyZXNzIgphcHBfZ2xvYmFsX2dldAo9PQphc3NlcnQKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKaW50Y18wIC8vIDEKYXBwX2dsb2JhbF9wdXQKaW50Y18wIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBtZXJnZV9zaGFyZXMKbWVyZ2VzaGFyZXNfMjI6CnByb3RvIDAgMQppbnRjXzEgLy8gMApieXRlYyA4IC8vICJpc19yZXNvbHZlZCIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgVHlwZUVudW0KcHVzaGludCA0IC8vIGF4ZmVyCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0UmVjZWl2ZXIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKPT0KYXNzZXJ0CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBYZmVyQXNzZXQKPT0KYXNzZXJ0CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDIKLQpndHhucyBBc3NldEFtb3VudAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmludGNfMSAvLyAwCj4KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMiAvLyAyCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAotCmFwcF9nbG9iYWxfcHV0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gc3BsaXRfc2hhcmVzCnNwbGl0c2hhcmVzXzIzOgpwcm90byAwIDEKaW50Y18xIC8vIDAKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAwCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAppbnRjXzEgLy8gMAo+CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFNlbmRlcgp0eG4gU2VuZGVyCj09CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50CisKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgpieXRlY18yIC8vICJub19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKKwphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGNsYWltCmNsYWltXzI0Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKYnl0ZWMgOCAvLyAiaXNfcmVzb2x2ZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldFJlY2VpdmVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCj09CmFzc2VydApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQp8fAphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBTZW5kZXIKdHhuIFNlbmRlcgo9PQphc3NlcnQKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAxCj09CmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KJiYKYm56IGNsYWltXzI0X2wxMgpieXRlYyAxOCAvLyAib3V0Y29tZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDAKPT0KYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CiYmCmJueiBjbGFpbV8yNF9sMTEKYnl0ZWMgMTggLy8gIm91dGNvbWUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMiAvLyAyCj09CmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIFhmZXJBc3NldAo9PQpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09Cnx8CiYmCmJueiBjbGFpbV8yNF9sNwpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJueiBjbGFpbV8yNF9sNgpieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KYnogY2xhaW1fMjRfbDEzCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Ci0KYXBwX2dsb2JhbF9wdXQKYiBjbGFpbV8yNF9sMTMKY2xhaW1fMjRfbDY6CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApiIGNsYWltXzI0X2wxMwpjbGFpbV8yNF9sNzoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAppbnRjXzIgLy8gMgovCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyA0IC8vICJub19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKPT0KYm56IGNsYWltXzI0X2wxMApieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgWGZlckFzc2V0Cj09CmJ6IGNsYWltXzI0X2wxMwpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgpieXRlY18xIC8vICJ5ZXNfc3VwcGx5IgphcHBfZ2xvYmFsX2dldAp0eG4gR3JvdXBJbmRleAppbnRjXzAgLy8gMQotCmd0eG5zIEFzc2V0QW1vdW50Ci0KYXBwX2dsb2JhbF9wdXQKYiBjbGFpbV8yNF9sMTMKY2xhaW1fMjRfbDEwOgpieXRlY18yIC8vICJub19zdXBwbHkiCmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudAotCmFwcF9nbG9iYWxfcHV0CmIgY2xhaW1fMjRfbDEzCmNsYWltXzI0X2wxMToKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAp0eG4gU2VuZGVyCmNhbGxzdWIgc2VuZGFzc2V0XzYKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgpieXRlY18yIC8vICJub19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApiIGNsYWltXzI0X2wxMwpjbGFpbV8yNF9sMTI6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CnR4biBHcm91cEluZGV4CmludGNfMCAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKLQphcHBfZ2xvYmFsX3B1dApjbGFpbV8yNF9sMTM6CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kCmRvbmF0ZWV4Y2Vzc3RvbWFya2V0ZnJpZW5kXzI1Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKdHhuIFNlbmRlcgpieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIHNhZmV3YWxsZXRiYWxhbmNlXzkKYnl0ZWNfMSAvLyAieWVzX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWNfMiAvLyAibm9fc3VwcGx5IgphcHBfZ2xvYmFsX2dldAorCj4KYnogZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRfMjVfbDIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKYnl0ZWNfMCAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzYWZld2FsbGV0YmFsYW5jZV85CmJ5dGVjXzEgLy8gInllc19zdXBwbHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gIm5vX3N1cHBseSIKYXBwX2dsb2JhbF9nZXQKKwotCmJ5dGVjXzAgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBzZW5kYXNzZXRfNgpkb25hdGVleGNlc3N0b21hcmtldGZyaWVuZF8yNV9sMjoKaW50Y18wIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBkZWxldGVfZXNjcm93CmRlbGV0ZWVzY3Jvd18yNjoKcHJvdG8gMiAxCmludGNfMSAvLyAwCmZyYW1lX2RpZyAtMgpjYWxsc3ViIGdldGFwcGNyZWF0b3JfNQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTIKYnl0ZWMgMTMgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMwo9PQp0eG4gU2VuZGVyCmJ5dGVjIDIyIC8vICJlc2Nyb3dfY2FuY2VsX2FkZHJlc3MiCmFwcF9nbG9iYWxfZ2V0Cj09Cnx8CmFzc2VydAppdHhuX2JlZ2luCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApieXRlYyAxOSAvLyAiZGVsZXRlKCl1aW50OCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0cwpieXRlY18zIC8vICJ5ZXNfYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjIDQgLy8gIm5vX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0cwp0eG4gU2VuZGVyCml0eG5fZmllbGQgQWNjb3VudHMKZnJhbWVfZGlnIC0yCmJ5dGVjIDEzIC8vICJvd25lciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzMKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX3N1Ym1pdApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpwdXNoaW50IDU1NjUwMCAvLyA1NTY1MDAKZnJhbWVfZGlnIC0xCmNhbGxzdWIgc2VuZGFsZ29fNwppbnRjXzAgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50Y18zIC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMjc6CnByb3RvIDAgMQppbnRjXzEgLy8gMAp0eG4gU2VuZGVyCmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKPT0KYXNzZXJ0CmJ5dGVjIDggLy8gImlzX3Jlc29sdmVkIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMQo9PQphc3NlcnQKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpieXRlY18wIC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIFhmZXJBc3NldApieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzEgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzEgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldENsb3NlVG8KaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjXzMgLy8gInllc19hc3NldF9pZCIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDb25maWdBc3NldAppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCnB1c2hpbnQgMyAvLyBhY2ZnCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWMgNCAvLyAibm9fYXNzZXRfaWQiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQ29uZmlnQXNzZXQKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgppbnRjXzAgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18xIC8vIDAKaXR4bl9maWVsZCBBbW91bnQKYnl0ZWMgOSAvLyAibWFya2V0X2ZyaWVuZF9hZGRyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGNfMSAvLyAwCml0eG5fZmllbGQgRmVlCmJ5dGVjIDkgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCml0eG5fc3VibWl0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjXzMgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gZG9fbm9vcApkb25vb3BfMjg6CnByb3RvIDEgMQppbnRjXzEgLy8gMApmcmFtZV9kaWcgLTEKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gb25fdXBkYXRlCm9udXBkYXRlXzI5Ogpwcm90byAwIDEKaW50Y18xIC8vIDAKdHhuIFNlbmRlcgpieXRlYyA5IC8vICJtYXJrZXRfZnJpZW5kX2FkZHIiCmFwcF9nbG9iYWxfZ2V0Cj09Cmdsb2JhbCBHcm91cFNpemUKaW50Y18wIC8vIDEKPT0KJiYKYXNzZXJ0CmludGNfMCAvLyAxCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIG9uX2NyZWF0ZV9jYXN0ZXIKb25jcmVhdGVjYXN0ZXJfMzA6CnByb3RvIDAgMAppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgppbnRjXzEgLy8gMApieXRlYyAxMiAvLyAiIgpkdXBuIDIKaW50Y18xIC8vIDAKZHVwCmJ5dGVjIDEyIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNApidG9pCmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmZyYW1lX2J1cnkgNgp0eG5hIEFwcGxpY2F0aW9uQXJncyA3CmZyYW1lX2J1cnkgNwp0eG5hIEFwcGxpY2F0aW9uQXJncyA4CmJ0b2kKZnJhbWVfYnVyeSA4CnR4bmEgQXBwbGljYXRpb25BcmdzIDkKYnRvaQpmcmFtZV9idXJ5IDkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKZnJhbWVfYnVyeSAxMApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApmcmFtZV9kaWcgNQpmcmFtZV9kaWcgNgpmcmFtZV9kaWcgNwpmcmFtZV9kaWcgOApmcmFtZV9kaWcgOQpmcmFtZV9kaWcgMTAKY2FsbHN1YiBvbmNyZWF0ZV8xMApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmJ5dGVjIDcgLy8gMHgwMAppbnRjXzEgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfZXNjcm93X2Nhc3RlcgpjcmVhdGVlc2Nyb3djYXN0ZXJfMzE6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXBuIDQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDMKYnRvaQpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAppbnRjXzEgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgNApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApjYWxsc3ViIGNyZWF0ZWVzY3Jvd18xNApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGFjdGl2YXRlX21hcmtldF9jYXN0ZXIKYWN0aXZhdGVtYXJrZXRjYXN0ZXJfMzI6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIGFjdGl2YXRlbWFya2V0XzE1CmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHByb2Nlc3NfcG90ZW50aWFsX21hdGNoX2Nhc3Rlcgpwcm9jZXNzcG90ZW50aWFsbWF0Y2hjYXN0ZXJfMzM6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzEgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMSAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgcHJvY2Vzc3BvdGVudGlhbG1hdGNoXzIwCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHJlc29sdmVfbWFya2V0X2Nhc3RlcgpyZXNvbHZlbWFya2V0Y2FzdGVyXzM0Ogpwcm90byAwIDAKaW50Y18xIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18xIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiByZXNvbHZlbWFya2V0XzIxCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG1lcmdlX3NoYXJlc19jYXN0ZXIKbWVyZ2VzaGFyZXNjYXN0ZXJfMzU6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIG1lcmdlc2hhcmVzXzIyCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHNwbGl0X3NoYXJlc19jYXN0ZXIKc3BsaXRzaGFyZXNjYXN0ZXJfMzY6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIHNwbGl0c2hhcmVzXzIzCmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNyAvLyAweDAwCmludGNfMSAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGNsYWltX2Nhc3RlcgpjbGFpbWNhc3Rlcl8zNzoKcHJvdG8gMCAwCmludGNfMSAvLyAwCmNhbGxzdWIgY2xhaW1fMjQKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZG9uYXRlX2V4Y2Vzc190b19tYXJrZXRfZnJpZW5kX2Nhc3Rlcgpkb25hdGVleGNlc3N0b21hcmtldGZyaWVuZGNhc3Rlcl8zODoKcHJvdG8gMCAwCmludGNfMSAvLyAwCmNhbGxzdWIgZG9uYXRlZXhjZXNzdG9tYXJrZXRmcmllbmRfMjUKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZGVsZXRlX2VzY3Jvd19jYXN0ZXIKZGVsZXRlZXNjcm93Y2FzdGVyXzM5Ogpwcm90byAwIDAKaW50Y18xIC8vIDAKZHVwCmJ5dGVjIDEyIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKY2FsbHN1YiBkZWxldGVlc2Nyb3dfMjYKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpieXRlYyA3IC8vIDB4MDAKaW50Y18xIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gZGVsZXRlX2Nhc3RlcgpkZWxldGVjYXN0ZXJfNDA6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIGRlbGV0ZV8yNwpmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmJ5dGVjIDcgLy8gMHgwMAppbnRjXzEgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBkb19ub29wX2Nhc3Rlcgpkb25vb3BjYXN0ZXJfNDE6CnByb3RvIDAgMAppbnRjXzEgLy8gMApkdXAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpjYWxsc3ViIGRvbm9vcF8yOApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG9uX3VwZGF0ZV9jYXN0ZXIKb251cGRhdGVjYXN0ZXJfNDI6CnByb3RvIDAgMAppbnRjXzEgLy8gMApjYWxsc3ViIG9udXBkYXRlXzI5CmZyYW1lX2J1cnkgMApieXRlYyA1IC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1Yg==\",\n \"clear\": \"I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu\"\n },\n \"state\": {\n \"global\": {\n \"num_byte_slices\": 6,\n \"num_uints\": 11\n },\n \"local\": {\n \"num_byte_slices\": 0,\n \"num_uints\": 0\n }\n },\n \"schema\": {\n \"global\": {\n \"declared\": {\n \"collateral_asset_id\": {\n \"type\": \"uint64\",\n \"key\": \"collateral_asset_id\",\n \"descr\": \"The asset id of the collatteral\"\n },\n \"escrow_cancel_address\": {\n \"type\": \"bytes\",\n \"key\": \"escrow_cancel_address\",\n \"descr\": \"The address that can cancel escrows\"\n },\n \"fee_address\": {\n \"type\": \"bytes\",\n \"key\": \"fee_address\",\n \"descr\": \"The address the fees go to\"\n },\n \"fee_base_percent\": {\n \"type\": \"uint64\",\n \"key\": \"fee_base_percent\",\n \"descr\": \"The base fee percent of the market\"\n },\n \"fee_timer_threshold\": {\n \"type\": \"uint64\",\n \"key\": \"fee_timer_threshold\",\n \"descr\": \"The number of seconds since fee_timer_start an order can match within to not pay fee\"\n },\n \"is_activated\": {\n \"type\": \"uint64\",\n \"key\": \"is_activated\",\n \"descr\": \"The status of the market\"\n },\n \"is_resolved\": {\n \"type\": \"uint64\",\n \"key\": \"is_resolved\",\n \"descr\": \"The status of the market\"\n },\n \"market_friend_addr\": {\n \"type\": \"bytes\",\n \"key\": \"market_friend_addr\",\n \"descr\": \"The address of the market friend\"\n },\n \"no_asset_id\": {\n \"type\": \"uint64\",\n \"key\": \"no_asset_id\",\n \"descr\": \"The asset id of the no outcome\"\n },\n \"no_supply\": {\n \"type\": \"uint64\",\n \"key\": \"no_supply\",\n \"descr\": \"The supply of the no asset\"\n },\n \"oracle_address\": {\n \"type\": \"bytes\",\n \"key\": \"oracle_address\",\n \"descr\": \"The address of the oracle\"\n },\n \"outcome\": {\n \"type\": \"uint64\",\n \"key\": \"outcome\",\n \"descr\": \"The outcome of the market\"\n },\n \"resolution_time\": {\n \"type\": \"uint64\",\n \"key\": \"resolution_time\",\n \"descr\": \"The timestamp the market should be resolved by (unix seconds)\"\n },\n \"rules\": {\n \"type\": \"bytes\",\n \"key\": \"rules\",\n \"descr\": \"The rules of the market\"\n },\n \"title\": {\n \"type\": \"bytes\",\n \"key\": \"title\",\n \"descr\": \"The name of the market\"\n },\n \"yes_asset_id\": {\n \"type\": \"uint64\",\n \"key\": \"yes_asset_id\",\n \"descr\": \"The asset id of the yes outcome\"\n },\n \"yes_supply\": {\n \"type\": \"uint64\",\n \"key\": \"yes_supply\",\n \"descr\": \"The supply of the yes asset\"\n }\n },\n \"reserved\": {}\n },\n \"local\": {\n \"declared\": {},\n \"reserved\": {}\n }\n },\n \"contract\": {\n \"name\": \"market_app\",\n \"methods\": [\n {\n \"name\": \"on_create\",\n \"args\": [\n {\n \"type\": \"string\",\n \"name\": \"title\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"collateral_asset_id\"\n },\n {\n \"type\": \"address\",\n \"name\": \"oracle_address\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"resolution_time\"\n },\n {\n \"type\": \"address\",\n \"name\": \"market_friend\"\n },\n {\n \"type\": \"string\",\n \"name\": \"rules\"\n },\n {\n \"type\": \"address\",\n \"name\": \"fee_address\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee_base_percent\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"fee_timer_threshhold\"\n },\n {\n \"type\": \"address\",\n \"name\": \"escrow_cancel_address\"\n }\n ],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"create_escrow\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"price\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"quantity\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"slippage\"\n },\n {\n \"type\": \"uint8\",\n \"name\": \"position\"\n }\n ],\n \"returns\": {\n \"type\": \"uint64\"\n }\n },\n {\n \"name\": \"activate_market\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"process_potential_match\",\n \"args\": [\n {\n \"type\": \"application\",\n \"name\": \"maker\"\n },\n {\n \"type\": \"application\",\n \"name\": \"taker\"\n }\n ],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"resolve_market\",\n \"args\": [\n {\n \"type\": \"uint8\",\n \"name\": \"resolution\"\n }\n ],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"merge_shares\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"split_shares\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"claim\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"donate_excess_to_market_friend\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"delete_escrow\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"escrow_app_id\"\n },\n {\n \"type\": \"address\",\n \"name\": \"algo_receiver\"\n }\n ],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"delete\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"do_noop\",\n \"args\": [\n {\n \"type\": \"uint64\",\n \"name\": \"call_number\"\n }\n ],\n \"returns\": {\n \"type\": \"uint64\"\n }\n },\n {\n \"name\": \"on_update\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint64\"\n }\n }\n ],\n \"networks\": {}\n },\n \"bare_call_config\": {}\n}\n\n/**\n * Defines an onCompletionAction of 'no_op'\n */\nexport type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC }\n/**\n * Defines an onCompletionAction of 'opt_in'\n */\nexport type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC }\n/**\n * Defines an onCompletionAction of 'close_out'\n */\nexport type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC }\n/**\n * Defines an onCompletionAction of 'delete_application'\n */\nexport type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC }\n/**\n * Defines an onCompletionAction of 'update_application'\n */\nexport type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC }\n/**\n * A state record containing a single unsigned integer\n */\nexport type IntegerState = {\n /**\n * Gets the state value as a BigInt.\n */\n asBigInt(): bigint\n /**\n * Gets the state value as a number.\n */\n asNumber(): number\n}\n/**\n * A state record containing binary data\n */\nexport type BinaryState = {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array\n /**\n * Gets the state value as a string\n */\n asString(): string\n}\n\nexport type AppCreateCallTransactionResult = AppCallTransactionResult & Partial<AppCompilationResult> & AppReference\nexport type AppUpdateCallTransactionResult = AppCallTransactionResult & Partial<AppCompilationResult>\n\nexport type AppClientComposeCallCoreParams = Omit<AppClientCallCoreParams, 'sendParams'> & {\n sendParams?: Omit<SendTransactionParams, 'skipSending' | 'atc' | 'skipWaiting' | 'maxRoundsToWaitForConfirmation' | 'populateAppCallResources'>\n}\nexport type AppClientComposeExecuteParams = Pick<SendTransactionParams, 'skipWaiting' | 'maxRoundsToWaitForConfirmation' | 'populateAppCallResources' | 'suppressLog'>\n\nexport type IncludeSchema = {\n /**\n * Any overrides for the storage schema to request for the created app; by default the schema indicated by the app spec is used.\n */\n schema?: Partial<AppStorageSchema>\n}\n\n/**\n * Defines the types of available calls and state of the MarketApp smart contract.\n */\nexport type MarketApp = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8' | 'on_create', {\n argsObj: {\n title: string\n collateralAssetId: bigint | number\n oracleAddress: string\n resolutionTime: bigint | number\n marketFriend: string\n rules: string\n feeAddress: string\n feeBasePercent: bigint | number\n feeTimerThreshhold: bigint | number\n escrowCancelAddress: string\n }\n argsTuple: [title: string, collateralAssetId: bigint | number, oracleAddress: string, resolutionTime: bigint | number, marketFriend: string, rules: string, feeAddress: string, feeBasePercent: bigint | number, feeTimerThreshhold: bigint | number, escrowCancelAddress: string]\n returns: number\n }>\n & Record<'create_escrow(uint64,uint64,uint64,uint8)uint64' | 'create_escrow', {\n argsObj: {\n price: bigint | number\n quantity: bigint | number\n slippage: bigint | number\n position: number\n }\n argsTuple: [price: bigint | number, quantity: bigint | number, slippage: bigint | number, position: number]\n returns: bigint\n }>\n & Record<'activate_market()uint8' | 'activate_market', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'process_potential_match(application,application)uint8' | 'process_potential_match', {\n argsObj: {\n maker: number | bigint\n taker: number | bigint\n }\n argsTuple: [maker: number | bigint, taker: number | bigint]\n returns: number\n }>\n & Record<'resolve_market(uint8)uint8' | 'resolve_market', {\n argsObj: {\n resolution: number\n }\n argsTuple: [resolution: number]\n returns: number\n }>\n & Record<'merge_shares()uint8' | 'merge_shares', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'split_shares()uint8' | 'split_shares', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'claim()uint8' | 'claim', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'donate_excess_to_market_friend()uint8' | 'donate_excess_to_market_friend', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'delete_escrow(uint64,address)uint8' | 'delete_escrow', {\n argsObj: {\n escrowAppId: bigint | number\n algoReceiver: string\n }\n argsTuple: [escrowAppId: bigint | number, algoReceiver: string]\n returns: number\n }>\n & Record<'delete()uint8' | 'delete', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'do_noop(uint64)uint64' | 'do_noop', {\n argsObj: {\n callNumber: bigint | number\n }\n argsTuple: [callNumber: bigint | number]\n returns: bigint\n }>\n & Record<'on_update()uint64' | 'on_update', {\n argsObj: {\n }\n argsTuple: []\n returns: bigint\n }>\n /**\n * Defines the shape of the global and local state of the application.\n */\n state: {\n global: {\n /**\n * The asset id of the collatteral\n */\n collateralAssetId?: IntegerState\n /**\n * The address that can cancel escrows\n */\n escrowCancelAddress?: BinaryState\n /**\n * The address the fees go to\n */\n feeAddress?: BinaryState\n /**\n * The base fee percent of the market\n */\n feeBasePercent?: IntegerState\n /**\n * The number of seconds since fee_timer_start an order can match within to not pay fee\n */\n feeTimerThreshold?: IntegerState\n /**\n * The status of the market\n */\n isActivated?: IntegerState\n /**\n * The status of the market\n */\n isResolved?: IntegerState\n /**\n * The address of the market friend\n */\n marketFriendAddr?: BinaryState\n /**\n * The asset id of the no outcome\n */\n noAssetId?: IntegerState\n /**\n * The supply of the no asset\n */\n noSupply?: IntegerState\n /**\n * The address of the oracle\n */\n oracleAddress?: BinaryState\n /**\n * The outcome of the market\n */\n outcome?: IntegerState\n /**\n * The timestamp the market should be resolved by (unix seconds)\n */\n resolutionTime?: IntegerState\n /**\n * The rules of the market\n */\n rules?: BinaryState\n /**\n * The name of the market\n */\n title?: BinaryState\n /**\n * The asset id of the yes outcome\n */\n yesAssetId?: IntegerState\n /**\n * The supply of the yes asset\n */\n yesSupply?: IntegerState\n }\n }\n}\n/**\n * Defines the possible abi call signatures\n */\nexport type MarketAppSig = keyof MarketApp['methods']\n/**\n * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made\n */\nexport type TypedCallParams<TSignature extends MarketAppSig | undefined> = {\n method: TSignature\n methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>\n} & AppClientCallCoreParams & CoreAppCallArgs\n/**\n * Defines the arguments required for a bare call\n */\nexport type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>\n/**\n * Maps a method signature from the MarketApp smart contract to the method's arguments in either tuple of struct form\n */\nexport type MethodArgs<TSignature extends MarketAppSig> = MarketApp['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the MarketApp smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends MarketAppSig> = MarketApp['methods'][TSignature]['returns']\n\n/**\n * A factory for available 'create' calls\n */\nexport type MarketAppCreateCalls = (typeof MarketAppCallFactory)['create']\n/**\n * Defines supported create methods for this smart contract\n */\nexport type MarketAppCreateCallParams =\n | (TypedCallParams<'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8'> & (OnCompleteNoOp))\n/**\n * A factory for available 'update' calls\n */\nexport type MarketAppUpdateCalls = (typeof MarketAppCallFactory)['update']\n/**\n * Defines supported update methods for this smart contract\n */\nexport type MarketAppUpdateCallParams =\n | TypedCallParams<'on_update()uint64'>\n/**\n * A factory for available 'delete' calls\n */\nexport type MarketAppDeleteCalls = (typeof MarketAppCallFactory)['delete']\n/**\n * Defines supported delete methods for this smart contract\n */\nexport type MarketAppDeleteCallParams =\n | TypedCallParams<'delete()uint8'>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type MarketAppDeployArgs = {\n deployTimeParams?: TealTemplateParams\n /**\n * A delegate which takes a create call factory and returns the create call params for this smart contract\n */\n createCall?: (callFactory: MarketAppCreateCalls) => MarketAppCreateCallParams\n /**\n * A delegate which takes a update call factory and returns the update call params for this smart contract\n */\n updateCall?: (callFactory: MarketAppUpdateCalls) => MarketAppUpdateCallParams\n /**\n * A delegate which takes a delete call factory and returns the delete call params for this smart contract\n */\n deleteCall?: (callFactory: MarketAppDeleteCalls) => MarketAppDeleteCallParams\n}\n\n\n/**\n * Exposes methods for constructing all available smart contract calls\n */\nexport abstract class MarketAppCallFactory {\n /**\n * Gets available create call factories\n */\n static get create() {\n return {\n /**\n * Constructs a create call for the market_app smart contract using the on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n onCreate(args: MethodArgs<'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) {\n return {\n method: 'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8' as const,\n methodArgs: Array.isArray(args) ? args : [args.title, args.collateralAssetId, args.oracleAddress, args.resolutionTime, args.marketFriend, args.rules, args.feeAddress, args.feeBasePercent, args.feeTimerThreshhold, args.escrowCancelAddress],\n ...params,\n }\n },\n }\n }\n\n /**\n * Gets available update call factories\n */\n static get update() {\n return {\n /**\n * Constructs an update call for the market_app smart contract using the on_update()uint64 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n onUpdate(args: MethodArgs<'on_update()uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) {\n return {\n method: 'on_update()uint64' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n },\n }\n }\n\n /**\n * Gets available delete call factories\n */\n static get delete() {\n return {\n /**\n * Constructs a delete call for the market_app smart contract using the delete()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n delete(args: MethodArgs<'delete()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return {\n method: 'delete()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the create_escrow(uint64,uint64,uint64,uint8)uint64 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static createEscrow(args: MethodArgs<'create_escrow(uint64,uint64,uint64,uint8)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'create_escrow(uint64,uint64,uint64,uint8)uint64' as const,\n methodArgs: Array.isArray(args) ? args : [args.price, args.quantity, args.slippage, args.position],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the activate_market()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static activateMarket(args: MethodArgs<'activate_market()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'activate_market()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the process_potential_match(application,application)uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static processPotentialMatch(args: MethodArgs<'process_potential_match(application,application)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'process_potential_match(application,application)uint8' as const,\n methodArgs: Array.isArray(args) ? args : [args.maker, args.taker],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the resolve_market(uint8)uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static resolveMarket(args: MethodArgs<'resolve_market(uint8)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'resolve_market(uint8)uint8' as const,\n methodArgs: Array.isArray(args) ? args : [args.resolution],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the merge_shares()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static mergeShares(args: MethodArgs<'merge_shares()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'merge_shares()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the split_shares()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static splitShares(args: MethodArgs<'split_shares()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'split_shares()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the claim()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static claim(args: MethodArgs<'claim()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'claim()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the donate_excess_to_market_friend()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static donateExcessToMarketFriend(args: MethodArgs<'donate_excess_to_market_friend()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'donate_excess_to_market_friend()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the delete_escrow(uint64,address)uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static deleteEscrow(args: MethodArgs<'delete_escrow(uint64,address)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'delete_escrow(uint64,address)uint8' as const,\n methodArgs: Array.isArray(args) ? args : [args.escrowAppId, args.algoReceiver],\n ...params,\n }\n }\n /**\n * Constructs a no op call for the do_noop(uint64)uint64 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static doNoop(args: MethodArgs<'do_noop(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'do_noop(uint64)uint64' as const,\n methodArgs: Array.isArray(args) ? args : [args.callNumber],\n ...params,\n }\n }\n}\n\n/**\n * A client to make calls to the market_app smart contract\n */\nexport class MarketAppClient {\n /**\n * The underlying `ApplicationClient` for when you want to have more flexibility\n */\n public readonly appClient: ApplicationClient\n\n private readonly sender: SendTransactionFrom | undefined\n\n /**\n * Creates a new instance of `MarketAppClient`\n *\n * @param appDetails appDetails The details to identify the app to deploy\n * @param algod An algod client instance\n */\n constructor(appDetails: AppDetails, private algod: Algodv2) {\n this.sender = appDetails.sender\n this.appClient = algokit.getAppClient({\n ...appDetails,\n app: APP_SPEC\n }, algod)\n }\n\n /**\n * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type\n *\n * @param result The AppCallTransactionResult to be mapped\n * @param returnValueFormatter An optional delegate to format the return value if required\n * @returns The smart contract response with an updated return value\n */\n protected mapReturnValue<TReturn, TResult extends AppCallTransactionResult = AppCallTransactionResult>(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType<TReturn> & TResult {\n if(result.return?.decodeError) {\n throw result.return.decodeError\n }\n const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined\n ? returnValueFormatter(result.return.returnValue)\n : result.return?.returnValue as TReturn | undefined\n return { ...result, return: returnValue } as AppCallTransactionResultOfType<TReturn> & TResult\n }\n\n /**\n * Calls the ABI method with the matching signature using an onCompletion code of NO_OP\n *\n * @param typedCallParams An object containing the method signature, args, and any other relevant parameters\n * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type\n * @returns The result of the smart contract call\n */\n public async call<TSignature extends keyof MarketApp['methods']>(typedCallParams: TypedCallParams<TSignature>, returnValueFormatter?: (value: any) => MethodReturn<TSignature>) {\n return this.mapReturnValue<MethodReturn<TSignature>>(await this.appClient.call(typedCallParams), returnValueFormatter)\n }\n\n /**\n * Idempotently deploys the market_app smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public deploy(params: MarketAppDeployArgs & AppClientDeployCoreParams & IncludeSchema = {}): ReturnType<ApplicationClient['deploy']> {\n const createArgs = params.createCall?.(MarketAppCallFactory.create)\n const updateArgs = params.updateCall?.(MarketAppCallFactory.update)\n const deleteArgs = params.deleteCall?.(MarketAppCallFactory.delete)\n return this.appClient.deploy({\n ...params,\n updateArgs,\n deleteArgs,\n createArgs,\n createOnCompleteAction: createArgs?.onCompleteAction,\n })\n }\n\n /**\n * Gets available create methods\n */\n public get create() {\n const $this = this\n return {\n /**\n * Creates a new instance of the market_app smart contract using the on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The create result\n */\n async onCreate(args: MethodArgs<'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8'>, params: AppClientCallCoreParams & AppClientCompilationParams & IncludeSchema & CoreAppCallArgs & (OnCompleteNoOp) = {}) {\n return $this.mapReturnValue<MethodReturn<'on_create(string,uint64,address,uint64,address,string,address,uint64,uint64,address)uint8'>, AppCreateCallTransactionResult>(await $this.appClient.create(MarketAppCallFactory.create.onCreate(args, params)))\n },\n }\n }\n\n /**\n * Gets available update methods\n */\n public get update() {\n const $this = this\n return {\n /**\n * Updates an existing instance of the market_app smart contract using the on_update()uint64 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The update result\n */\n async onUpdate(args: MethodArgs<'on_update()uint64'>, params: AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}) {\n return $this.mapReturnValue<MethodReturn<'on_update()uint64'>, AppUpdateCallTransactionResult>(await $this.appClient.update(MarketAppCallFactory.update.onUpdate(args, params)))\n },\n }\n }\n\n /**\n * Gets available delete methods\n */\n public get delete() {\n const $this = this\n return {\n /**\n * Deletes an existing instance of the market_app smart contract using the delete()uint8 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The delete result\n */\n async delete(args: MethodArgs<'delete()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return $this.mapReturnValue<MethodReturn<'delete()uint8'>>(await $this.appClient.delete(MarketAppCallFactory.delete.delete(args, params)))\n },\n }\n }\n\n /**\n * Makes a clear_state call to an existing instance of the market_app smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The clear_state result\n */\n public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.appClient.clearState(args)\n }\n\n /**\n * Calls the create_escrow(uint64,uint64,uint64,uint8)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public createEscrow(args: MethodArgs<'create_escrow(uint64,uint64,uint64,uint8)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.createEscrow(args, params))\n }\n\n /**\n * Calls the activate_market()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public activateMarket(args: MethodArgs<'activate_market()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.activateMarket(args, params))\n }\n\n /**\n * Calls the process_potential_match(application,application)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public processPotentialMatch(args: MethodArgs<'process_potential_match(application,application)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.processPotentialMatch(args, params))\n }\n\n /**\n * Calls the resolve_market(uint8)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public resolveMarket(args: MethodArgs<'resolve_market(uint8)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.resolveMarket(args, params))\n }\n\n /**\n * Calls the merge_shares()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public mergeShares(args: MethodArgs<'merge_shares()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.mergeShares(args, params))\n }\n\n /**\n * Calls the split_shares()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public splitShares(args: MethodArgs<'split_shares()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.splitShares(args, params))\n }\n\n /**\n * Calls the claim()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public claim(args: MethodArgs<'claim()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.claim(args, params))\n }\n\n /**\n * Calls the donate_excess_to_market_friend()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public donateExcessToMarketFriend(args: MethodArgs<'donate_excess_to_market_friend()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.donateExcessToMarketFriend(args, params))\n }\n\n /**\n * Calls the delete_escrow(uint64,address)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public deleteEscrow(args: MethodArgs<'delete_escrow(uint64,address)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.deleteEscrow(args, params))\n }\n\n /**\n * Calls the do_noop(uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public doNoop(args: MethodArgs<'do_noop(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MarketAppCallFactory.doNoop(args, params))\n }\n\n /**\n * Extracts a binary state value out of an AppState dictionary\n *\n * @param state The state dictionary containing the state value\n * @param key The key of the state value\n * @returns A BinaryState instance containing the state value, or undefined if the key was not found\n */\n private static getBinaryState(state: AppState, key: string): BinaryState | undefined {\n const value = state[key]\n if (!value) return undefined\n if (!('valueRaw' in value))\n throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`)\n return {\n asString(): string {\n return value.value\n },\n asByteArray(): Uint8Array {\n return value.valueRaw\n }\n }\n }\n\n /**\n * Extracts a integer state value out of an AppState dictionary\n *\n * @param state The state dictionary containing the state value\n * @param key The key of the state value\n * @returns An IntegerState instance containing the state value, or undefined if the key was not found\n */\n private static getIntegerState(state: AppState, key: string): IntegerState | undefined {\n const value = state[key]\n if (!value) return undefined\n if ('valueRaw' in value)\n throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`)\n return {\n asBigInt() {\n return typeof value.value === 'bigint' ? value.value : BigInt(value.value)\n },\n asNumber(): number {\n return typeof value.value === 'bigint' ? Number(value.value) : value.value\n },\n }\n }\n\n /**\n * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value\n */\n public async getGlobalState(): Promise<MarketApp['state']['global']> {\n const state = await this.appClient.getGlobalState()\n return {\n get collateralAssetId() {\n return MarketAppClient.getIntegerState(state, 'collateral_asset_id')\n },\n get escrowCancelAddress() {\n return MarketAppClient.getBinaryState(state, 'escrow_cancel_address')\n },\n get feeAddress() {\n return MarketAppClient.getBinaryState(state, 'fee_address')\n },\n get feeBasePercent() {\n return MarketAppClient.getIntegerState(state, 'fee_base_percent')\n },\n get feeTimerThreshold() {\n return MarketAppClient.getIntegerState(state, 'fee_timer_threshold')\n },\n get isActivated() {\n return MarketAppClient.getIntegerState(state, 'is_activated')\n },\n get isResolved() {\n return MarketAppClient.getIntegerState(state, 'is_resolved')\n },\n get marketFriendAddr() {\n return MarketAppClient.getBinaryState(state, 'market_friend_addr')\n },\n get noAssetId() {\n return MarketAppClient.getIntegerState(state, 'no_asset_id')\n },\n get noSupply() {\n return MarketAppClient.getIntegerState(state, 'no_supply')\n },\n get oracleAddress() {\n return MarketAppClient.getBinaryState(state, 'oracle_address')\n },\n get outcome() {\n return MarketAppClient.getIntegerState(state, 'outcome')\n },\n get resolutionTime() {\n return MarketAppClient.getIntegerState(state, 'resolution_time')\n },\n get rules() {\n return MarketAppClient.getBinaryState(state, 'rules')\n },\n get title() {\n return MarketAppClient.getBinaryState(state, 'title')\n },\n get yesAssetId() {\n return MarketAppClient.getIntegerState(state, 'yes_asset_id')\n },\n get yesSupply() {\n return MarketAppClient.getIntegerState(state, 'yes_supply')\n },\n }\n }\n\n public compose(): MarketAppComposer {\n const client = this\n const atc = new AtomicTransactionComposer()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: any) => any)> = []\n return {\n createEscrow(args: MethodArgs<'create_escrow(uint64,uint64,uint64,uint8)uint64'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.createEscrow(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n activateMarket(args: MethodArgs<'activate_market()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.activateMarket(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n processPotentialMatch(args: MethodArgs<'process_potential_match(application,application)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.processPotentialMatch(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n resolveMarket(args: MethodArgs<'resolve_market(uint8)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.resolveMarket(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n mergeShares(args: MethodArgs<'merge_shares()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.mergeShares(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n splitShares(args: MethodArgs<'split_shares()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.splitShares(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n claim(args: MethodArgs<'claim()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.claim(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n donateExcessToMarketFriend(args: MethodArgs<'donate_excess_to_market_friend()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.donateExcessToMarketFriend(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n deleteEscrow(args: MethodArgs<'delete_escrow(uint64,address)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.deleteEscrow(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n doNoop(args: MethodArgs<'do_noop(uint64)uint64'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.doNoop(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n get update() {\n const $this = this\n return {\n onUpdate(args: MethodArgs<'on_update()uint64'>, params?: AppClientComposeCallCoreParams & AppClientCompilationParams) {\n promiseChain = promiseChain.then(() => client.update.onUpdate(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return $this\n },\n }\n },\n get delete() {\n const $this = this\n return {\n delete(args: MethodArgs<'delete()uint8'>, params?: AppClientComposeCallCoreParams) {\n promiseChain = promiseChain.then(() => client.delete.delete(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return $this\n },\n }\n },\n clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise<SendTransactionResult>, defaultSender?: SendTransactionFrom) {\n promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender)))\n return this\n },\n async atc() {\n await promiseChain\n return atc\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }))\n return {\n ...result,\n returns: result.methodResults?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue)\n }\n },\n async execute(sendParams?: AppClientComposeExecuteParams) {\n await promiseChain\n const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams }, client.algod)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue)\n }\n }\n } as unknown as MarketAppComposer\n }\n}\nexport type MarketAppComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the create_escrow(uint64,uint64,uint64,uint8)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createEscrow(args: MethodArgs<'create_escrow(uint64,uint64,uint64,uint8)uint64'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'create_escrow(uint64,uint64,uint64,uint8)uint64'>]>\n\n /**\n * Calls the activate_market()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n activateMarket(args: MethodArgs<'activate_market()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'activate_market()uint8'>]>\n\n /**\n * Calls the process_potential_match(application,application)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n processPotentialMatch(args: MethodArgs<'process_potential_match(application,application)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'process_potential_match(application,application)uint8'>]>\n\n /**\n * Calls the resolve_market(uint8)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n resolveMarket(args: MethodArgs<'resolve_market(uint8)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'resolve_market(uint8)uint8'>]>\n\n /**\n * Calls the merge_shares()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n mergeShares(args: MethodArgs<'merge_shares()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'merge_shares()uint8'>]>\n\n /**\n * Calls the split_shares()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n splitShares(args: MethodArgs<'split_shares()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'split_shares()uint8'>]>\n\n /**\n * Calls the claim()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claim(args: MethodArgs<'claim()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'claim()uint8'>]>\n\n /**\n * Calls the donate_excess_to_market_friend()uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n donateExcessToMarketFriend(args: MethodArgs<'donate_excess_to_market_friend()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'donate_excess_to_market_friend()uint8'>]>\n\n /**\n * Calls the delete_escrow(uint64,address)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deleteEscrow(args: MethodArgs<'delete_escrow(uint64,address)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'delete_escrow(uint64,address)uint8'>]>\n\n /**\n * Calls the do_noop(uint64)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n doNoop(args: MethodArgs<'do_noop(uint64)uint64'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, MethodReturn<'do_noop(uint64)uint64'>]>\n\n /**\n * Gets available update methods\n */\n readonly update: {\n /**\n * Updates an existing instance of the market_app smart contract using the on_update()uint64 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n onUpdate(args: MethodArgs<'on_update()uint64'>, params?: AppClientComposeCallCoreParams & AppClientCompilationParams): MarketAppComposer<[...TReturns, MethodReturn<'on_update()uint64'>]>\n }\n\n /**\n * Gets available delete methods\n */\n readonly delete: {\n /**\n * Deletes an existing instance of the market_app smart contract using the delete()uint8 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n delete(args: MethodArgs<'delete()uint8'>, params?: AppClientComposeCallCoreParams): MarketAppComposer<[...TReturns, MethodReturn<'delete()uint8'>]>\n }\n\n /**\n * Makes a clear_state call to an existing instance of the market_app smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs): MarketAppComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter)\n * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer.\n */\n addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise<SendTransactionResult>, defaultSender?: SendTransactionFrom): MarketAppComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n atc(): Promise<AtomicTransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(options?: SimulateOptions): Promise<MarketAppComposerSimulateResult<TReturns>>\n /**\n * Executes the transaction group and returns the results\n */\n execute(sendParams?: AppClientComposeExecuteParams): Promise<MarketAppComposerResults<TReturns>>\n}\nexport type SimulateOptions = Omit<ConstructorParameters<typeof modelsv2.SimulateRequest>[0], 'txnGroups'>\nexport type MarketAppComposerSimulateResult<TReturns extends [...any[]]> = {\n returns: TReturns\n methodResults: ABIResult[]\n simulateResponse: modelsv2.SimulateResponse\n}\nexport type MarketAppComposerResults<TReturns extends [...any[]]> = {\n returns: TReturns\n groupId: string\n txIds: string[]\n transactions: Transaction[]\n}\n","/* eslint-disable */\n// @ts-nocheck\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^2\n */\nimport * as algokit from '@algorandfoundation/algokit-utils'\nimport type {\n ABIAppCallArg,\n AppCallTransactionResult,\n AppCallTransactionResultOfType,\n AppCompilationResult,\n AppReference,\n AppState,\n AppStorageSchema,\n CoreAppCallArgs,\n RawAppCallArgs,\n TealTemplateParams,\n} from '@algorandfoundation/algokit-utils/types/app'\nimport type {\n AppClientCallCoreParams,\n AppClientCompilationParams,\n AppClientDeployCoreParams,\n AppDetails,\n ApplicationClient,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport type { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec'\nimport type { SendTransactionResult, TransactionToSign, SendTransactionFrom, SendTransactionParams } from '@algorandfoundation/algokit-utils/types/transaction'\nimport type { ABIResult, TransactionWithSigner } from 'algosdk'\nimport { Algodv2, OnApplicationComplete, Transaction, AtomicTransactionComposer, modelsv2 } from 'algosdk'\nexport const APP_SPEC: AppSpec = {\n \"hints\": {\n \"on_create()uint8\": {\n \"call_config\": {\n \"no_op\": \"CREATE\"\n }\n },\n \"propose_a_match(application,application,uint64,address,address,address,uint64)uint8\": {\n \"call_config\": {\n \"no_op\": \"CALL\"\n }\n }\n },\n \"source\": {\n \"approval\": \"I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA2IDI1NgpieXRlY2Jsb2NrIDB4MDEgMHg2MzZmNmM2YzYxNzQ2NTcyNjE2YzVmNjE3MzczNjU3NDVmNjk2NCAweDc5NjU3MzVmNjE3MzczNjU3NDVmNjk2NCAweDZlNmY1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHgxNTFmN2M3NSAweDAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NDNkYjYyYTEgLy8gIm9uX2NyZWF0ZSgpdWludDgiCj09CmJueiBtYWluX2w0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MTZhYzZkYmIgLy8gInByb3Bvc2VfYV9tYXRjaChhcHBsaWNhdGlvbixhcHBsaWNhdGlvbix1aW50NjQsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsdWludDY0KXVpbnQ4Igo9PQpibnogbWFpbl9sMwplcnIKbWFpbl9sMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBwcm9wb3NlYW1hdGNoY2FzdGVyXzQKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgb25jcmVhdGVjYXN0ZXJfMwppbnRjXzEgLy8gMQpyZXR1cm4KCi8vIGdsb2JhbF9tdXN0X2dldApnbG9iYWxtdXN0Z2V0XzA6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDIKc3RvcmUgMQpsb2FkIDIKYXNzZXJ0CmxvYWQgMQpyZXRzdWIKCi8vIG9uX2NyZWF0ZQpvbmNyZWF0ZV8xOgpwcm90byAwIDEKaW50Y18wIC8vIDAKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBwcm9wb3NlX2FfbWF0Y2gKcHJvcG9zZWFtYXRjaF8yOgpwcm90byA3IDEKaW50Y18wIC8vIDAKdHhuIEdyb3VwSW5kZXgKZnJhbWVfZGlnIC0xCi0KZ3R4bnMgTGFzdExvZwpwdXNoaW50IDQgLy8gNAp0eG4gR3JvdXBJbmRleApmcmFtZV9kaWcgLTEKLQpndHhucyBMYXN0TG9nCmxlbgpwdXNoaW50IDQgLy8gNAotCmV4dHJhY3QzCmJ0b2kKc3RvcmUgMAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC02CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKbG9hZCAwCml0eG5fZmllbGQgQXBwbGljYXRpb25zCnB1c2hieXRlcyAweDMyY2UyODFlIC8vICJtYXRjaF9tYWtlcihhcHBsaWNhdGlvbix1aW50NjQpdWludDgiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjXzAgLy8gMHgwMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTUKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmxvYWQgMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzEgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMiAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzMgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwppdHhuX25leHQKaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpsb2FkIDAKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtNgp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKcHVzaGJ5dGVzIDB4ZGI5MjJmYzIgLy8gIm1hdGNoX3Rha2VyKGFwcGxpY2F0aW9uKXVpbnQ2NCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMCAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC02CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzEgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMiAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjXzMgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfMAppdHhuX2ZpZWxkIEFzc2V0cwpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBBY2NvdW50cwpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBY2NvdW50cwppdHhuX25leHQKaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTcKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApmcmFtZV9kaWcgLTYKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmxvYWQgMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpwdXNoYnl0ZXMgMHhiYTFkZWVmNSAvLyAicHJvY2Vzc19wb3RlbnRpYWxfbWF0Y2goYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDgiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjXzAgLy8gMHgwMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpwdXNoYnl0ZXMgMHgwMiAvLyAweDAyCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzAKaXR4bl9maWVsZCBBc3NldHMKZnJhbWVfZGlnIC03CnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlY18yIC8vICJ5ZXNfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF8wCml0eG5fZmllbGQgQXNzZXRzCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFjY291bnRzCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIEFjY291bnRzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFjY291bnRzCml0eG5fbmV4dAppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNwp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyBOb09wCml0eG5fZmllbGQgT25Db21wbGV0aW9uCnB1c2hieXRlcyAweGI0ZjExYTE4IC8vICJkb19ub29wKHVpbnQ2NCl1aW50NjQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmludGNfMSAvLyAxCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyBvbl9jcmVhdGVfY2FzdGVyCm9uY3JlYXRlY2FzdGVyXzM6CnByb3RvIDAgMAppbnRjXzAgLy8gMApjYWxsc3ViIG9uY3JlYXRlXzEKZnJhbWVfYnVyeSAwCmJ5dGVjIDQgLy8gMHgxNTFmN2M3NQpieXRlYyA1IC8vIDB4MDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gcHJvcG9zZV9hX21hdGNoX2Nhc3Rlcgpwcm9wb3NlYW1hdGNoY2FzdGVyXzQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDMKcHVzaGJ5dGVzIDB4IC8vICIiCmR1cG4gMgppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmZyYW1lX2J1cnkgNgp0eG5hIEFwcGxpY2F0aW9uQXJncyA3CmJ0b2kKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmZyYW1lX2RpZyA0CmZyYW1lX2RpZyA1CmZyYW1lX2RpZyA2CmZyYW1lX2RpZyA3CmNhbGxzdWIgcHJvcG9zZWFtYXRjaF8yCmZyYW1lX2J1cnkgMApieXRlYyA0IC8vIDB4MTUxZjdjNzUKYnl0ZWMgNSAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWI=\",\n \"clear\": \"I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu\"\n },\n \"state\": {\n \"global\": {\n \"num_byte_slices\": 0,\n \"num_uints\": 0\n },\n \"local\": {\n \"num_byte_slices\": 0,\n \"num_uints\": 0\n }\n },\n \"schema\": {\n \"global\": {\n \"declared\": {},\n \"reserved\": {}\n },\n \"local\": {\n \"declared\": {},\n \"reserved\": {}\n }\n },\n \"contract\": {\n \"name\": \"matcher_app\",\n \"methods\": [\n {\n \"name\": \"on_create\",\n \"args\": [],\n \"returns\": {\n \"type\": \"uint8\"\n }\n },\n {\n \"name\": \"propose_a_match\",\n \"args\": [\n {\n \"type\": \"application\",\n \"name\": \"market_app\"\n },\n {\n \"type\": \"application\",\n \"name\": \"maker\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"quantity_matched\"\n },\n {\n \"type\": \"address\",\n \"name\": \"taker_address\"\n },\n {\n \"type\": \"address\",\n \"name\": \"maker_address\"\n },\n {\n \"type\": \"address\",\n \"name\": \"fee_address\"\n },\n {\n \"type\": \"uint64\",\n \"name\": \"taker_app_created_index_offset\"\n }\n ],\n \"returns\": {\n \"type\": \"uint8\"\n }\n }\n ],\n \"networks\": {}\n },\n \"bare_call_config\": {}\n}\n\n/**\n * Defines an onCompletionAction of 'no_op'\n */\nexport type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC }\n/**\n * Defines an onCompletionAction of 'opt_in'\n */\nexport type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC }\n/**\n * Defines an onCompletionAction of 'close_out'\n */\nexport type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC }\n/**\n * Defines an onCompletionAction of 'delete_application'\n */\nexport type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC }\n/**\n * Defines an onCompletionAction of 'update_application'\n */\nexport type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC }\n/**\n * A state record containing a single unsigned integer\n */\nexport type IntegerState = {\n /**\n * Gets the state value as a BigInt.\n */\n asBigInt(): bigint\n /**\n * Gets the state value as a number.\n */\n asNumber(): number\n}\n/**\n * A state record containing binary data\n */\nexport type BinaryState = {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array\n /**\n * Gets the state value as a string\n */\n asString(): string\n}\n\nexport type AppCreateCallTransactionResult = AppCallTransactionResult & Partial<AppCompilationResult> & AppReference\nexport type AppUpdateCallTransactionResult = AppCallTransactionResult & Partial<AppCompilationResult>\n\nexport type AppClientComposeCallCoreParams = Omit<AppClientCallCoreParams, 'sendParams'> & {\n sendParams?: Omit<SendTransactionParams, 'skipSending' | 'atc' | 'skipWaiting' | 'maxRoundsToWaitForConfirmation' | 'populateAppCallResources'>\n}\nexport type AppClientComposeExecuteParams = Pick<SendTransactionParams, 'skipWaiting' | 'maxRoundsToWaitForConfirmation' | 'populateAppCallResources' | 'suppressLog'>\n\nexport type IncludeSchema = {\n /**\n * Any overrides for the storage schema to request for the created app; by default the schema indicated by the app spec is used.\n */\n schema?: Partial<AppStorageSchema>\n}\n\n/**\n * Defines the types of available calls and state of the MatcherApp smart contract.\n */\nexport type MatcherApp = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'on_create()uint8' | 'on_create', {\n argsObj: {\n }\n argsTuple: []\n returns: number\n }>\n & Record<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8' | 'propose_a_match', {\n argsObj: {\n marketApp: number | bigint\n maker: number | bigint\n quantityMatched: bigint | number\n takerAddress: string\n makerAddress: string\n feeAddress: string\n takerAppCreatedIndexOffset: bigint | number\n }\n argsTuple: [marketApp: number | bigint, maker: number | bigint, quantityMatched: bigint | number, takerAddress: string, makerAddress: string, feeAddress: string, takerAppCreatedIndexOffset: bigint | number]\n returns: number\n }>\n}\n/**\n * Defines the possible abi call signatures\n */\nexport type MatcherAppSig = keyof MatcherApp['methods']\n/**\n * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made\n */\nexport type TypedCallParams<TSignature extends MatcherAppSig | undefined> = {\n method: TSignature\n methodArgs: TSignature extends undefined ? undefined : Array<ABIAppCallArg | undefined>\n} & AppClientCallCoreParams & CoreAppCallArgs\n/**\n * Defines the arguments required for a bare call\n */\nexport type BareCallArgs = Omit<RawAppCallArgs, keyof CoreAppCallArgs>\n/**\n * Maps a method signature from the MatcherApp smart contract to the method's arguments in either tuple of struct form\n */\nexport type MethodArgs<TSignature extends MatcherAppSig> = MatcherApp['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the MatcherApp smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends MatcherAppSig> = MatcherApp['methods'][TSignature]['returns']\n\n/**\n * A factory for available 'create' calls\n */\nexport type MatcherAppCreateCalls = (typeof MatcherAppCallFactory)['create']\n/**\n * Defines supported create methods for this smart contract\n */\nexport type MatcherAppCreateCallParams =\n | (TypedCallParams<'on_create()uint8'> & (OnCompleteNoOp))\n/**\n * Defines arguments required for the deploy method.\n */\nexport type MatcherAppDeployArgs = {\n deployTimeParams?: TealTemplateParams\n /**\n * A delegate which takes a create call factory and returns the create call params for this smart contract\n */\n createCall?: (callFactory: MatcherAppCreateCalls) => MatcherAppCreateCallParams\n}\n\n\n/**\n * Exposes methods for constructing all available smart contract calls\n */\nexport abstract class MatcherAppCallFactory {\n /**\n * Gets available create call factories\n */\n static get create() {\n return {\n /**\n * Constructs a create call for the matcher_app smart contract using the on_create()uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n onCreate(args: MethodArgs<'on_create()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) {\n return {\n method: 'on_create()uint8' as const,\n methodArgs: Array.isArray(args) ? args : [],\n ...params,\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the propose_a_match(application,application,uint64,address,address,address,uint64)uint8 ABI method\n *\n * @param args Any args for the contract call\n * @param params Any additional parameters for the call\n * @returns A TypedCallParams object for the call\n */\n static proposeAMatch(args: MethodArgs<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) {\n return {\n method: 'propose_a_match(application,application,uint64,address,address,address,uint64)uint8' as const,\n methodArgs: Array.isArray(args) ? args : [args.marketApp, args.maker, args.quantityMatched, args.takerAddress, args.makerAddress, args.feeAddress, args.takerAppCreatedIndexOffset],\n ...params,\n }\n }\n}\n\n/**\n * A client to make calls to the matcher_app smart contract\n */\nexport class MatcherAppClient {\n /**\n * The underlying `ApplicationClient` for when you want to have more flexibility\n */\n public readonly appClient: ApplicationClient\n\n private readonly sender: SendTransactionFrom | undefined\n\n /**\n * Creates a new instance of `MatcherAppClient`\n *\n * @param appDetails appDetails The details to identify the app to deploy\n * @param algod An algod client instance\n */\n constructor(appDetails: AppDetails, private algod: Algodv2) {\n this.sender = appDetails.sender\n this.appClient = algokit.getAppClient({\n ...appDetails,\n app: APP_SPEC\n }, algod)\n }\n\n /**\n * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type\n *\n * @param result The AppCallTransactionResult to be mapped\n * @param returnValueFormatter An optional delegate to format the return value if required\n * @returns The smart contract response with an updated return value\n */\n protected mapReturnValue<TReturn, TResult extends AppCallTransactionResult = AppCallTransactionResult>(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType<TReturn> & TResult {\n if(result.return?.decodeError) {\n throw result.return.decodeError\n }\n const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined\n ? returnValueFormatter(result.return.returnValue)\n : result.return?.returnValue as TReturn | undefined\n return { ...result, return: returnValue } as AppCallTransactionResultOfType<TReturn> & TResult\n }\n\n /**\n * Calls the ABI method with the matching signature using an onCompletion code of NO_OP\n *\n * @param typedCallParams An object containing the method signature, args, and any other relevant parameters\n * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type\n * @returns The result of the smart contract call\n */\n public async call<TSignature extends keyof MatcherApp['methods']>(typedCallParams: TypedCallParams<TSignature>, returnValueFormatter?: (value: any) => MethodReturn<TSignature>) {\n return this.mapReturnValue<MethodReturn<TSignature>>(await this.appClient.call(typedCallParams), returnValueFormatter)\n }\n\n /**\n * Idempotently deploys the matcher_app smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public deploy(params: MatcherAppDeployArgs & AppClientDeployCoreParams & IncludeSchema = {}): ReturnType<ApplicationClient['deploy']> {\n const createArgs = params.createCall?.(MatcherAppCallFactory.create)\n return this.appClient.deploy({\n ...params,\n createArgs,\n createOnCompleteAction: createArgs?.onCompleteAction,\n })\n }\n\n /**\n * Gets available create methods\n */\n public get create() {\n const $this = this\n return {\n /**\n * Creates a new instance of the matcher_app smart contract using the on_create()uint8 ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The create result\n */\n async onCreate(args: MethodArgs<'on_create()uint8'>, params: AppClientCallCoreParams & AppClientCompilationParams & IncludeSchema & CoreAppCallArgs & (OnCompleteNoOp) = {}) {\n return $this.mapReturnValue<MethodReturn<'on_create()uint8'>, AppCreateCallTransactionResult>(await $this.appClient.create(MatcherAppCallFactory.create.onCreate(args, params)))\n },\n }\n }\n\n /**\n * Makes a clear_state call to an existing instance of the matcher_app smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The clear_state result\n */\n public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.appClient.clearState(args)\n }\n\n /**\n * Calls the propose_a_match(application,application,uint64,address,address,address,uint64)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The result of the call\n */\n public proposeAMatch(args: MethodArgs<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) {\n return this.call(MatcherAppCallFactory.proposeAMatch(args, params))\n }\n\n public compose(): MatcherAppComposer {\n const client = this\n const atc = new AtomicTransactionComposer()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: any) => any)> = []\n return {\n proposeAMatch(args: MethodArgs<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.proposeAMatch(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs) {\n promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}}))\n resultMappers.push(undefined)\n return this\n },\n addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise<SendTransactionResult>, defaultSender?: SendTransactionFrom) {\n promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender)))\n return this\n },\n async atc() {\n await promiseChain\n return atc\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }))\n return {\n ...result,\n returns: result.methodResults?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue)\n }\n },\n async execute(sendParams?: AppClientComposeExecuteParams) {\n await promiseChain\n const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams }, client.algod)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue)\n }\n }\n } as unknown as MatcherAppComposer\n }\n}\nexport type MatcherAppComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the propose_a_match(application,application,uint64,address,address,address,uint64)uint8 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n proposeAMatch(args: MethodArgs<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): MatcherAppComposer<[...TReturns, MethodReturn<'propose_a_match(application,application,uint64,address,address,address,uint64)uint8'>]>\n\n /**\n * Makes a clear_state call to an existing instance of the matcher_app smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs): MatcherAppComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter)\n * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer.\n */\n addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise<SendTransactionResult>, defaultSender?: SendTransactionFrom): MatcherAppComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n atc(): Promise<AtomicTransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(options?: SimulateOptions): Promise<MatcherAppComposerSimulateResult<TReturns>>\n /**\n * Executes the transaction group and returns the results\n */\n execute(sendParams?: AppClientComposeExecuteParams): Promise<MatcherAppComposerResults<TReturns>>\n}\nexport type SimulateOptions = Omit<ConstructorParameters<typeof modelsv2.SimulateRequest>[0], 'txnGroups'>\nexport type MatcherAppComposerSimulateResult<TReturns extends [...any[]]> = {\n returns: TReturns\n methodResults: ABIResult[]\n simulateResponse: modelsv2.SimulateResponse\n}\nexport type MatcherAppComposerResults<TReturns extends [...any[]]> = {\n returns: TReturns\n groupId: string\n txIds: string[]\n transactions: Transaction[]\n}\n","import { Decimal } from 'decimal.js';\n\n/**\n * Calculates the required fee amount in microunits.\n *\n * Formula: `fee = feeBase * quantity * price * (1 - price)`\n *\n * All values are in microunits where 1,000,000 = $1.00.\n *\n * @param quantity - Order quantity in microunits (e.g. 1_000_000 for 1 share)\n * @param price - Order price in microunits (e.g. 500_000 for $0.50)\n * @param feeBase - Fee base in microunits (e.g. 70_000 for 7%)\n * @returns Fee amount in microunits (ceiling)\n *\n * @example\n * ```typescript\n * // 1 share at $0.50 with 7% fee base\n * calculateFee(1_000_000, 500_000, 70_000); // => 17500\n * ```\n */\nexport const calculateFee = (\n quantity: number | bigint,\n price: number | bigint,\n feeBase: number | bigint,\n): number => {\n const q = new Decimal(quantity.toString());\n const p = new Decimal(price.toString()).div(1_000_000);\n const fb = new Decimal(feeBase.toString()).div(1_000_000);\n\n // fee = feeBase * quantity * price * (1 - price)\n const fee = fb.mul(q).mul(p).mul(new Decimal(1).minus(p));\n\n return Math.ceil(fee.toNumber());\n};\n\n/**\n * Calculates the fee when given a total amount that includes the fee.\n *\n * @param totalAmount - Total amount in microunits including fee\n * @param price - Price in microunits\n * @param feeBase - Fee base in microunits\n * @returns Fee amount in microunits (ceiling)\n */\nexport const calculateFeeFromTotal = (\n totalAmount: number | bigint,\n price: number | bigint,\n feeBase: number | bigint,\n): number => {\n const total = new Decimal(totalAmount.toString());\n const p = new Decimal(price.toString()).div(1_000_000);\n const fb = new Decimal(feeBase.toString()).div(1_000_000);\n\n const denominator = p.mul(new Decimal(1).plus(fb.mul(new Decimal(1).minus(p))));\n const quantity = total.div(denominator);\n\n const fee = fb.mul(quantity).mul(p).mul(new Decimal(1).minus(p));\n return Math.ceil(fee.toNumber());\n};\n","import algosdk from 'algosdk';\nimport type { EscrowGlobalState, MarketGlobalState } from '../types.js';\n\n/**\n * Decodes raw Algorand global state array into a key-value object.\n *\n * @param rawState - The raw global-state array from algod/indexer\n * @returns Decoded key-value object\n */\nexport const decodeGlobalState = (rawState: any[]): Record<string, any> => {\n const state: Record<string, any> = {};\n\n for (const item of rawState) {\n const key = Buffer.from(item.key, 'base64').toString();\n\n if (item.value.type === 1) {\n // Bytes value\n if (key === 'owner' || key === 'oracle_address' || key === 'fee_address' ||\n key === 'market_friend_addr' || key === 'escrow_cancel_address') {\n try {\n const addressBytes = Buffer.from(item.value.bytes, 'base64');\n if (addressBytes.length === 32) {\n state[key] = algosdk.encodeAddress(addressBytes);\n } else {\n state[key] = item.value.bytes;\n }\n } catch {\n state[key] = item.value.bytes;\n }\n } else {\n try {\n state[key] = Buffer.from(item.value.bytes, 'base64').toString();\n } catch {\n state[key] = item.value.bytes;\n }\n }\n } else {\n // Uint value\n state[key] = Number(item.value.uint);\n }\n }\n\n return state;\n};\n\n/**\n * Reads the global state of a market app from the chain.\n *\n * @param algodClient - Algod client\n * @param marketAppId - The market app ID\n * @returns Decoded market global state\n */\nexport const getMarketGlobalState = async (\n algodClient: algosdk.Algodv2,\n marketAppId: number,\n): Promise<MarketGlobalState> => {\n const appInfo = await algodClient.getApplicationByID(marketAppId).do();\n const rawState = appInfo.params?.['global-state'] ?? appInfo['params']?.['global-state'] ?? [];\n return decodeGlobalState(rawState) as MarketGlobalState;\n};\n\n/**\n * Reads the global state of an escrow app via the indexer.\n *\n * @param indexerClient - Indexer client\n * @param escrowAppId - The escrow app ID\n * @returns Decoded escrow global state\n */\nexport const getEscrowGlobalState = async (\n indexerClient: algosdk.Indexer,\n escrowAppId: number,\n): Promise<EscrowGlobalState> => {\n const appInfo = await indexerClient.lookupApplications(escrowAppId).do();\n const rawState = appInfo.application?.params?.['global-state'] ?? [];\n return decodeGlobalState(rawState) as EscrowGlobalState;\n};\n\n/**\n * Checks if an address has opted into an ASA.\n *\n * @param algodClient - Algod client\n * @param address - The Algorand address to check\n * @param assetId - The ASA ID to check\n * @returns True if opted in\n */\nexport const checkAssetOptIn = async (\n algodClient: algosdk.Algodv2,\n address: string,\n assetId: number,\n): Promise<boolean> => {\n try {\n const accountInfo = await algodClient.accountInformation(address).do();\n const assets = accountInfo.assets || accountInfo['assets'] || [];\n return assets.some((a: any) => (a['asset-id'] ?? a.assetId) === assetId);\n } catch {\n return false;\n }\n};\n","import type { Orderbook, OrderbookEntry, CounterpartyMatch } from '../types.js';\n\n/**\n * Computes matching counterparty orders from an orderbook for a given order.\n *\n * Supports both direct matching (Buy YES vs Sell YES) and complementary matching\n * (Buy YES at 60c vs Buy NO at 40c — prices sum to $1.00).\n *\n * @param orderbook - The full orderbook for the market\n * @param isBuying - Whether the taker is buying\n * @param isYes - Whether the taker's position is Yes (true) or No (false)\n * @param quantity - Desired quantity in microunits\n * @param price - Desired price in microunits\n * @param slippageTolerance - Maximum acceptable slippage in microunits\n * @returns Array of counterparty matches, sorted by best price, up to the requested quantity\n */\nexport const calculateMatchingOrders = (\n orderbook: Orderbook,\n isBuying: boolean,\n isYes: boolean,\n quantity: number,\n price: number,\n slippageTolerance: number,\n): CounterpartyMatch[] => {\n const { yes, no } = orderbook;\n\n const getMatchingOrders = (): OrderbookEntry[] => {\n if (isBuying) {\n if (isYes) {\n const directOrders = yes.asks;\n const complementaryOrders = no.bids.map((bid) => ({\n price: 1_000_000 - bid.price,\n quantity: bid.quantity,\n escrowAppId: bid.escrowAppId,\n owner: bid.owner,\n }));\n const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => a.price - b.price);\n return allOrders.filter((order) => order.price <= price + slippageTolerance);\n } else {\n const directOrders = no.asks;\n const complementaryOrders = yes.bids.map((bid) => ({\n price: 1_000_000 - bid.price,\n quantity: bid.quantity,\n escrowAppId: bid.escrowAppId,\n owner: bid.owner,\n }));\n const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => a.price - b.price);\n return allOrders.filter((order) => order.price <= price + slippageTolerance);\n }\n } else {\n if (isYes) {\n const directOrders = yes.bids;\n const complementaryOrders = no.asks.map((ask) => ({\n price: 1_000_000 - ask.price,\n quantity: ask.quantity,\n escrowAppId: ask.escrowAppId,\n owner: ask.owner,\n }));\n const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => b.price - a.price);\n return allOrders.filter((order) => order.price >= price - slippageTolerance);\n } else {\n const directOrders = no.bids;\n const complementaryOrders = yes.asks.map((ask) => ({\n price: 1_000_000 - ask.price,\n quantity: ask.quantity,\n escrowAppId: ask.escrowAppId,\n owner: ask.owner,\n }));\n const allOrders = [...directOrders, ...complementaryOrders].sort((a, b) => b.price - a.price);\n return allOrders.filter((order) => order.price >= price - slippageTolerance);\n }\n }\n };\n\n const matchingOrders = getMatchingOrders();\n if (matchingOrders.length === 0) return [];\n\n const matches: CounterpartyMatch[] = [];\n let volumeLeft = quantity;\n for (const counterParty of matchingOrders) {\n if (volumeLeft <= 0) break;\n const amountToTake = Math.min(counterParty.quantity, volumeLeft);\n if (amountToTake > 0) {\n matches.push({\n escrowAppId: counterParty.escrowAppId,\n quantity: amountToTake,\n owner: counterParty.owner,\n });\n volumeLeft -= amountToTake;\n }\n }\n\n return matches;\n};\n","import algosdk from 'algosdk';\nimport type { AlphaClientConfig, Orderbook, OrderbookEntry, EscrowGlobalState, OpenOrder } from '../types.js';\nimport { decodeGlobalState } from '../utils/state.js';\n\ntype EscrowApp = {\n appId: number;\n globalState: EscrowGlobalState;\n};\n\n/**\n * Fetches all non-deleted applications created by an address (paginated).\n */\nconst getAllCreatedApplications = async (\n indexerClient: algosdk.Indexer,\n address: string,\n limit: number = 100,\n): Promise<any[]> => {\n let applications: any[] = [];\n let nextToken: string | undefined;\n let hasMore = true;\n\n while (hasMore) {\n let query = indexerClient.lookupAccountCreatedApplications(address).limit(limit);\n if (nextToken) {\n query = query.nextToken(nextToken);\n }\n const response = await query.do();\n\n if (response.applications?.length) {\n applications = [...applications, ...response.applications];\n }\n\n if (response['next-token']) {\n nextToken = response['next-token'];\n } else {\n hasMore = false;\n }\n }\n\n return applications.filter((a: any) => a.deleted === false);\n};\n\n/**\n * Fetches global state for a list of applications.\n */\nconst fetchApplicationsGlobalState = async (\n indexerClient: algosdk.Indexer,\n applications: any[],\n): Promise<EscrowApp[]> => {\n return Promise.all(\n applications.map(async (app) => {\n const appId = app.id;\n try {\n const appInfo = await indexerClient.lookupApplications(appId).do();\n const globalState: EscrowGlobalState = {};\n const rawGlobalState = appInfo.application?.params?.['global-state'];\n\n if (rawGlobalState) {\n const decoded = decodeGlobalState(rawGlobalState);\n Object.assign(globalState, decoded);\n }\n\n return { appId: Number(appId), globalState };\n } catch {\n return { appId: 0, globalState: {} as EscrowGlobalState };\n }\n }),\n );\n};\n\n/**\n * Transforms raw escrow apps into orderbook entries.\n */\nconst transformOrders = (orders: EscrowApp[]): OrderbookEntry[] =>\n orders\n .filter((o) => o.appId > 0)\n .map((o) => ({\n price: o.globalState.price ?? 0,\n quantity: (o.globalState.quantity ?? 0) - (o.globalState.quantity_filled ?? 0),\n escrowAppId: o.appId,\n owner: o.globalState.owner ?? '',\n }));\n\n/**\n * Fetches the full on-chain orderbook for a market.\n *\n * Reads all escrow apps created by the market app, decodes their global state,\n * and categorizes into yes/no bids/asks. Only includes limit orders (slippage === 0)\n * with unfilled quantity.\n *\n * @param config - Alpha client config\n * @param marketAppId - The market app ID\n * @returns The full orderbook with yes/no bids and asks\n */\nexport const getOrderbook = async (\n config: AlphaClientConfig,\n marketAppId: number,\n): Promise<Orderbook> => {\n const appAddress = algosdk.getApplicationAddress(marketAppId);\n const applications = await getAllCreatedApplications(config.indexerClient, appAddress);\n const appsWithState = await fetchApplicationsGlobalState(config.indexerClient, applications);\n\n const isOpenLimitOrder = (o: EscrowApp) =>\n (o.globalState.quantity ?? 0) > (o.globalState.quantity_filled ?? 0) &&\n o.globalState.slippage === 0;\n\n const yesBuyOrders = appsWithState.filter(\n (o) => o.globalState.side === 1 && o.globalState.position === 1 && isOpenLimitOrder(o),\n );\n const yesSellOrders = appsWithState.filter(\n (o) => o.globalState.side === 0 && o.globalState.position === 1 && isOpenLimitOrder(o),\n );\n const noBuyOrders = appsWithState.filter(\n (o) => o.globalState.side === 1 && o.globalState.position === 0 && isOpenLimitOrder(o),\n );\n const noSellOrders = appsWithState.filter(\n (o) => o.globalState.side === 0 && o.globalState.position === 0 && isOpenLimitOrder(o),\n );\n\n return {\n yes: {\n bids: transformOrders(yesBuyOrders),\n asks: transformOrders(yesSellOrders),\n },\n no: {\n bids: transformOrders(noBuyOrders),\n asks: transformOrders(noSellOrders),\n },\n };\n};\n\n/**\n * Fetches the open orders for a specific wallet on a market.\n *\n * Reads all escrow apps created by the market, filters by owner address,\n * and returns only unfilled orders.\n *\n * @param config - Alpha client config\n * @param marketAppId - The market app ID\n * @param walletAddress - Optional wallet address (defaults to config.activeAddress)\n * @returns Array of open orders belonging to the wallet\n */\nexport const getOpenOrders = async (\n config: AlphaClientConfig,\n marketAppId: number,\n walletAddress?: string,\n): Promise<OpenOrder[]> => {\n const owner = walletAddress ?? config.activeAddress;\n const appAddress = algosdk.getApplicationAddress(marketAppId);\n const applications = await getAllCreatedApplications(config.indexerClient, appAddress);\n const appsWithState = await fetchApplicationsGlobalState(config.indexerClient, applications);\n\n return appsWithState\n .filter(\n (o) =>\n o.globalState.owner === owner &&\n (o.globalState.quantity ?? 0) > (o.globalState.quantity_filled ?? 0),\n )\n .map((o) => ({\n escrowAppId: o.appId,\n marketAppId,\n position: (o.globalState.position ?? 0) as 0 | 1,\n side: o.globalState.side ?? 0,\n price: o.globalState.price ?? 0,\n quantity: o.globalState.quantity ?? 0,\n quantityFilled: o.globalState.quantity_filled ?? 0,\n slippage: o.globalState.slippage ?? 0,\n owner: o.globalState.owner ?? '',\n }));\n};\n","import algosdk, { AtomicTransactionComposer, getApplicationAddress } from 'algosdk';\nimport * as algokit from '@algorandfoundation/algokit-utils';\nimport type { TransactionSignerAccount } from '@algorandfoundation/algokit-utils/types/account';\nimport { MarketAppClient } from '../contracts/market_app.js';\nimport { MatcherAppClient } from '../contracts/matcher_app.js';\nimport type {\n AlphaClientConfig,\n CreateLimitOrderParams,\n CreateMarketOrderParams,\n CancelOrderParams,\n ProposeMatchParams,\n CreateOrderResult,\n CreateMarketOrderResult,\n CancelOrderResult,\n ProposeMatchResult,\n CounterpartyMatch,\n} from '../types.js';\nimport { calculateFee } from '../utils/fees.js';\nimport { getMarketGlobalState, checkAssetOptIn } from '../utils/state.js';\nimport { calculateMatchingOrders } from '../utils/matching.js';\nimport { getOrderbook } from './orderbook.js';\n\n/**\n * Extracts the created escrow app ID from the transaction using retries.\n * First tries algod pendingTransactionInformation, then falls back to indexer with backoff.\n */\nconst extractEscrowAppId = async (\n algodClient: algosdk.Algodv2,\n indexerClient: algosdk.Indexer,\n targetTxId: string,\n): Promise<number> => {\n // Try algod pending info first\n try {\n const pendingInfo = await algodClient.pendingTransactionInformation(targetTxId).do();\n if (pendingInfo?.['inner-txns']?.[0]?.['created-application-index']) {\n return pendingInfo['inner-txns'][0]['created-application-index'];\n }\n } catch {\n // Fall through to indexer\n }\n\n // Retry with indexer (exponential backoff)\n const backoffs = [1000, 1500, 2000, 3000, 5000, 8000];\n for (const delayMs of backoffs) {\n try {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n const txnLookup = await indexerClient.lookupTransactionByID(targetTxId).do();\n if (txnLookup?.transaction?.['inner-txns']?.[0]?.['created-application-index']) {\n return txnLookup.transaction['inner-txns'][0]['created-application-index'];\n }\n } catch {\n // Retry on 404/lag\n }\n }\n\n return 0;\n};\n\n/**\n * Creates a limit order (slippage = 0) on a market.\n *\n * Builds and executes an atomic transaction group:\n * 1. (Optional) Asset opt-in for the outcome token or USDC\n * 2. ALGO payment (957,000 microAlgos) to market app for escrow MBR\n * 3. Asset transfer (USDC if buying, outcome token if selling) to market app\n * 4. App call: market_app.create_escrow(price, quantity, 0, position)\n *\n * @param config - Alpha client config\n * @param params - Limit order parameters\n * @returns The created escrow app ID and transaction info\n */\nexport const createLimitOrder = async (\n config: AlphaClientConfig,\n params: CreateLimitOrderParams,\n): Promise<CreateOrderResult> => {\n return createOrder(config, { ...params, slippage: 0, matchingOrders: [] });\n};\n\n/**\n * Creates a market order with automatic matching.\n *\n * Fetches the orderbook, computes matching counterparty orders, then builds\n * an atomic transaction group that creates the escrow + proposes matches.\n *\n * @param config - Alpha client config\n * @param params - Market order parameters\n * @returns The created escrow app ID, matched quantity, and transaction info\n */\nexport const createMarketOrder = async (\n config: AlphaClientConfig,\n params: CreateMarketOrderParams,\n): Promise<CreateMarketOrderResult> => {\n // Auto-fetch matching orders if not provided\n let matchingOrders = params.matchingOrders;\n if (!matchingOrders) {\n const orderbook = await getOrderbook(config, params.marketAppId);\n matchingOrders = calculateMatchingOrders(\n orderbook,\n params.isBuying,\n params.position === 1,\n params.quantity,\n params.price,\n params.slippage,\n );\n }\n\n const totalMatchedQuantity = matchingOrders.reduce((sum, o) => sum + o.quantity, 0);\n const result = await createOrder(config, {\n ...params,\n matchingOrders,\n });\n\n return { ...result, matchedQuantity: totalMatchedQuantity };\n};\n\n/**\n * Internal: builds and executes the order creation atomic group.\n */\nconst createOrder = async (\n config: AlphaClientConfig,\n params: CreateLimitOrderParams & { slippage: number; matchingOrders: CounterpartyMatch[] },\n): Promise<CreateOrderResult> => {\n const { algodClient, indexerClient, signer, activeAddress, matcherAppId, usdcAssetId, feeAddress } = config;\n const { marketAppId, position, price, quantity, isBuying, slippage, matchingOrders } = params;\n\n const globalState = await getMarketGlobalState(algodClient, marketAppId);\n const yesAssetId = globalState.yes_asset_id;\n const noAssetId = globalState.no_asset_id;\n const feeBase = params.feeBase ?? globalState.fee_base_percent;\n // Use the market's on-chain fee address for matching (must be in accounts array)\n const marketFeeAddress = globalState.fee_address || feeAddress;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: activeAddress };\n const marketClient = new MarketAppClient(\n { resolveBy: 'id', id: marketAppId, sender: signerAccount },\n algodClient,\n );\n const matcherClient = new MatcherAppClient(\n { resolveBy: 'id', id: matcherAppId, sender: signerAccount },\n algodClient,\n );\n\n let fee = 0;\n if (isBuying) {\n fee = calculateFee(quantity, price + slippage, feeBase);\n }\n\n const marketAddress = getApplicationAddress(marketAppId);\n const atc = new AtomicTransactionComposer();\n let createEscrowTxnIndex = 0;\n\n // Step 1: Optional asset opt-in\n if (!isBuying) {\n const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);\n if (!hasUsdcOptIn) {\n const optInTxn = await algokit.transferAsset(\n { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: optInTxn.transaction, signer });\n createEscrowTxnIndex++;\n }\n } else {\n const assetId = position === 1 ? yesAssetId : noAssetId;\n const hasAssetOptIn = await checkAssetOptIn(algodClient, activeAddress, assetId);\n if (!hasAssetOptIn) {\n const optInTxn = await algokit.transferAsset(\n { from: signerAccount, to: activeAddress, assetId, amount: 0, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: optInTxn.transaction, signer });\n createEscrowTxnIndex++;\n }\n }\n\n // Step 2: ALGO payment for escrow MBR\n const paymentTxn = await algokit.transferAlgos(\n { from: signerAccount, to: marketAddress, amount: algokit.microAlgos(957_000), skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: paymentTxn.transaction, signer });\n createEscrowTxnIndex++;\n\n // Step 3: Fund transfer (USDC if buying, outcome token if selling)\n const fundAmount = isBuying\n ? Math.floor((quantity * (price + slippage)) / 1_000_000) + fee\n : quantity;\n const fundAssetId = isBuying ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;\n\n const assetTransferTxn = await algokit.transferAsset(\n { from: signerAccount, to: marketAddress, amount: fundAmount, assetId: fundAssetId, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: assetTransferTxn.transaction, signer });\n createEscrowTxnIndex++;\n\n // Step 4: Create escrow app call\n const createEscrowTxn = await marketClient.createEscrow(\n { price, quantity, slippage, position },\n { assets: [usdcAssetId, yesAssetId, noAssetId], sendParams: { skipSending: true } },\n );\n atc.addTransaction({ txn: createEscrowTxn.transaction, signer });\n\n // Step 5: Propose matches (for market orders)\n let matchIndex = 1;\n for (const matchingOrder of matchingOrders) {\n // ALGO payment to counterparty escrow\n const payCounterPartyTxn = await algokit.transferAlgos(\n {\n from: signerAccount,\n to: getApplicationAddress(matchingOrder.escrowAppId),\n amount: algokit.microAlgos(1000 * (isBuying ? 1 : 2)),\n skipSending: true,\n },\n algodClient,\n );\n atc.addTransaction({ txn: payCounterPartyTxn.transaction, signer });\n\n // Propose match — use the market's on-chain fee address so it's available to inner txns\n const proposeAMatchTxn = await matcherClient.proposeAMatch(\n {\n marketApp: marketAppId,\n maker: matchingOrder.escrowAppId,\n quantityMatched: Math.min(matchingOrder.quantity, quantity),\n takerAddress: activeAddress,\n makerAddress: matchingOrder.owner,\n feeAddress: marketFeeAddress,\n takerAppCreatedIndexOffset: matchIndex * 2,\n },\n {\n assets: [usdcAssetId, yesAssetId, noAssetId],\n accounts: [activeAddress, marketFeeAddress, matchingOrder.owner],\n sendParams: { skipSending: true, fee: algokit.microAlgos(10_000) },\n },\n );\n atc.addTransaction({ txn: proposeAMatchTxn.transaction, signer });\n matchIndex++;\n }\n\n // Execute the atomic group\n const result = await atc.execute(algodClient, 4);\n\n // Extract escrow app ID with retry logic\n const targetTxId = result.txIDs[createEscrowTxnIndex];\n const escrowAppId = await extractEscrowAppId(algodClient, indexerClient, targetTxId);\n\n return {\n escrowAppId,\n txIds: result.txIDs,\n confirmedRound: result.confirmedRound,\n };\n};\n\n/**\n * Cancels an open order by deleting its escrow app.\n *\n * Calls market_app.delete_escrow(escrowAppId, algoReceiver) which deletes\n * the escrow app and returns funds to the owner.\n *\n * @param config - Alpha client config\n * @param params - Cancel order parameters\n * @returns Whether the cancellation succeeded\n */\nexport const cancelOrder = async (\n config: AlphaClientConfig,\n params: CancelOrderParams,\n): Promise<CancelOrderResult> => {\n const { algodClient, signer, usdcAssetId } = config;\n const { marketAppId, escrowAppId, orderOwner } = params;\n\n const globalState = await getMarketGlobalState(algodClient, marketAppId);\n const yesAssetId = globalState.yes_asset_id;\n const noAssetId = globalState.no_asset_id;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: orderOwner };\n const marketClient = new MarketAppClient(\n { resolveBy: 'id', id: marketAppId, sender: signerAccount },\n algodClient,\n );\n\n const atc = new AtomicTransactionComposer();\n\n const deleteCallTxn = await marketClient.deleteEscrow(\n { escrowAppId, algoReceiver: orderOwner },\n {\n apps: [escrowAppId],\n assets: [usdcAssetId, yesAssetId, noAssetId],\n accounts: [orderOwner],\n sendParams: { skipSending: true, fee: algokit.microAlgos(7_000) },\n },\n );\n atc.addTransaction({ txn: deleteCallTxn.transaction, signer });\n\n const result = await atc.execute(algodClient, 4);\n\n return {\n success: true,\n txIds: result.txIDs,\n };\n};\n\n/**\n * Proposes a match between an existing maker order and the taker (you).\n *\n * This creates a new taker escrow and matches it against the maker's existing order.\n * The matcher app orchestrates the inner transactions to settle the trade.\n *\n * @param config - Alpha client config\n * @param params - Match proposal parameters\n * @returns Whether the match succeeded\n */\nexport const proposeMatch = async (\n config: AlphaClientConfig,\n params: ProposeMatchParams,\n): Promise<ProposeMatchResult> => {\n const { algodClient, signer, activeAddress, matcherAppId, usdcAssetId, feeAddress } = config;\n const { marketAppId, makerEscrowAppId, makerAddress, quantityMatched } = params;\n\n const globalState = await getMarketGlobalState(algodClient, marketAppId);\n const yesAssetId = globalState.yes_asset_id;\n const noAssetId = globalState.no_asset_id;\n // Use the market's on-chain fee address for matching (must be in accounts array)\n const marketFeeAddress = globalState.fee_address || feeAddress;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: activeAddress };\n const matcherClient = new MatcherAppClient(\n { resolveBy: 'id', id: matcherAppId, sender: signerAccount },\n algodClient,\n );\n\n const atc = new AtomicTransactionComposer();\n\n // ALGO payment to maker escrow\n const payMakerTxn = await algokit.transferAlgos(\n {\n from: signerAccount,\n to: getApplicationAddress(makerEscrowAppId),\n amount: algokit.microAlgos(2_000),\n skipSending: true,\n },\n algodClient,\n );\n atc.addTransaction({ txn: payMakerTxn.transaction, signer });\n\n // Propose match call — use the market's on-chain fee address\n const proposeTxn = await matcherClient.proposeAMatch(\n {\n marketApp: marketAppId,\n maker: makerEscrowAppId,\n quantityMatched,\n takerAddress: activeAddress,\n makerAddress,\n feeAddress: marketFeeAddress,\n takerAppCreatedIndexOffset: 0,\n },\n {\n assets: [usdcAssetId, yesAssetId, noAssetId],\n accounts: [activeAddress, marketFeeAddress, makerAddress],\n sendParams: { skipSending: true, fee: algokit.microAlgos(10_000) },\n },\n );\n atc.addTransaction({ txn: proposeTxn.transaction, signer });\n\n const result = await atc.execute(algodClient, 4);\n\n return {\n success: true,\n txIds: result.txIDs,\n };\n};\n","import algosdk, { AtomicTransactionComposer, getApplicationAddress } from 'algosdk';\nimport * as algokit from '@algorandfoundation/algokit-utils';\nimport type { TransactionSignerAccount } from '@algorandfoundation/algokit-utils/types/account';\nimport { MarketAppClient } from '../contracts/market_app.js';\nimport type {\n AlphaClientConfig,\n SplitSharesParams,\n MergeSharesParams,\n ClaimParams,\n SplitMergeResult,\n ClaimResult,\n WalletPosition,\n} from '../types.js';\nimport { getMarketGlobalState, checkAssetOptIn } from '../utils/state.js';\n\n/**\n * Splits USDC into equal amounts of YES and NO outcome tokens.\n *\n * Builds and executes an atomic transaction group:\n * 1. (Optional) Asset opt-in for YES token\n * 2. (Optional) Asset opt-in for NO token\n * 3. ALGO payment to market app (covers inner txn fees)\n * 4. USDC transfer to market app\n * 5. App call: market_app.split_shares()\n *\n * @param config - Alpha client config\n * @param params - Split parameters (marketAppId, amount in microunits)\n * @returns Transaction result\n */\nexport const splitShares = async (\n config: AlphaClientConfig,\n params: SplitSharesParams,\n): Promise<SplitMergeResult> => {\n const { algodClient, signer, activeAddress, usdcAssetId } = config;\n const { marketAppId, amount } = params;\n\n const globalState = await getMarketGlobalState(algodClient, marketAppId);\n const yesAssetId = globalState.yes_asset_id;\n const noAssetId = globalState.no_asset_id;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: activeAddress };\n const marketClient = new MarketAppClient(\n { resolveBy: 'id', id: marketAppId, sender: signerAccount },\n algodClient,\n );\n const marketAddress = getApplicationAddress(marketAppId);\n\n const atc = new AtomicTransactionComposer();\n let optInCosts = 0;\n\n // Optional YES token opt-in\n const hasYesOptIn = await checkAssetOptIn(algodClient, activeAddress, yesAssetId);\n if (!hasYesOptIn) {\n const optInTxn = await algokit.transferAsset(\n { from: signerAccount, to: activeAddress, assetId: yesAssetId, amount: 0, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: optInTxn.transaction, signer });\n optInCosts += 1000;\n }\n\n // Optional NO token opt-in\n const hasNoOptIn = await checkAssetOptIn(algodClient, activeAddress, noAssetId);\n if (!hasNoOptIn) {\n const optInTxn = await algokit.transferAsset(\n { from: signerAccount, to: activeAddress, assetId: noAssetId, amount: 0, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: optInTxn.transaction, signer });\n optInCosts += 1000;\n }\n\n // ALGO payment for inner txn fees\n const algoPayment = await algokit.transferAlgos(\n { from: signerAccount, to: marketAddress, amount: algokit.microAlgos(5000 + optInCosts), skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: algoPayment.transaction, signer });\n\n // USDC transfer\n const usdcTransfer = await algokit.transferAsset(\n { from: signerAccount, to: marketAddress, amount, assetId: usdcAssetId, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: usdcTransfer.transaction, signer });\n\n // split_shares() app call\n const splitTxn = await marketClient.splitShares(\n {},\n { assets: [usdcAssetId, yesAssetId, noAssetId], sendParams: { skipSending: true } },\n );\n atc.addTransaction({ txn: splitTxn.transaction, signer });\n\n const result = await atc.execute(algodClient, 4);\n\n return {\n success: true,\n txIds: result.txIDs,\n confirmedRound: result.confirmedRound,\n };\n};\n\n/**\n * Merges equal amounts of YES and NO outcome tokens back into USDC.\n *\n * Builds and executes an atomic transaction group:\n * 1. (Optional) Asset opt-in for USDC\n * 2. ALGO payment to market app (covers inner txn fees)\n * 3. YES token transfer to market app\n * 4. NO token transfer to market app\n * 5. App call: market_app.merge_shares()\n *\n * @param config - Alpha client config\n * @param params - Merge parameters (marketAppId, amount in microunits)\n * @returns Transaction result\n */\nexport const mergeShares = async (\n config: AlphaClientConfig,\n params: MergeSharesParams,\n): Promise<SplitMergeResult> => {\n const { algodClient, signer, activeAddress, usdcAssetId } = config;\n const { marketAppId, amount } = params;\n\n const globalState = await getMarketGlobalState(algodClient, marketAppId);\n const yesAssetId = globalState.yes_asset_id;\n const noAssetId = globalState.no_asset_id;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: activeAddress };\n const marketClient = new MarketAppClient(\n { resolveBy: 'id', id: marketAppId, sender: signerAccount },\n algodClient,\n );\n const marketAddress = getApplicationAddress(marketAppId);\n\n const atc = new AtomicTransactionComposer();\n let optInCosts = 0;\n\n // Optional USDC opt-in\n const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);\n if (!hasUsdcOptIn) {\n const optInTxn = await algokit.transferAsset(\n { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: optInTxn.transaction, signer });\n optInCosts += 1000;\n }\n\n // ALGO payment\n const algoPayment = await algokit.transferAlgos(\n { from: signerAccount, to: marketAddress, amount: algokit.microAlgos(5000 + optInCosts), skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: algoPayment.transaction, signer });\n\n // YES token transfer\n const yesTransfer = await algokit.transferAsset(\n { from: signerAccount, to: marketAddress, amount, assetId: yesAssetId, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: yesTransfer.transaction, signer });\n\n // NO token transfer\n const noTransfer = await algokit.transferAsset(\n { from: signerAccount, to: marketAddress, amount, assetId: noAssetId, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: noTransfer.transaction, signer });\n\n // merge_shares() app call\n const mergeTxn = await marketClient.mergeShares(\n {},\n { assets: [usdcAssetId], sendParams: { skipSending: true } },\n );\n atc.addTransaction({ txn: mergeTxn.transaction, signer });\n\n const result = await atc.execute(algodClient, 4);\n\n return {\n success: true,\n txIds: result.txIDs,\n confirmedRound: result.confirmedRound,\n };\n};\n\n/**\n * Claims USDC from a resolved market by redeeming outcome tokens.\n *\n * If the market resolved in your favor, you get USDC 1:1.\n * If voided, you get USDC at half value.\n * Losing tokens are \"burned\" (returned to contract, no USDC back).\n *\n * Builds and executes an atomic transaction group:\n * 1. Token transfer to market app\n * 2. App call: market_app.claim()\n * 3. Asset opt-out (close remainder to market app)\n *\n * @param config - Alpha client config\n * @param params - Claim parameters\n * @returns Transaction result\n */\nexport const claim = async (\n config: AlphaClientConfig,\n params: ClaimParams,\n): Promise<ClaimResult> => {\n const { algodClient, signer, activeAddress, usdcAssetId } = config;\n const { marketAppId, assetId } = params;\n\n const signerAccount: TransactionSignerAccount = { signer, addr: activeAddress };\n const marketClient = new MarketAppClient(\n { resolveBy: 'id', id: marketAppId, sender: signerAccount },\n algodClient,\n );\n const marketAddress = getApplicationAddress(marketAppId);\n\n // Get token balance\n let tokenBalance = params.amount;\n if (!tokenBalance) {\n const accountInfo = await algodClient.accountInformation(activeAddress).do();\n const assets = accountInfo.assets || accountInfo['assets'] || [];\n const asset = assets.find((a: any) => (a['asset-id'] ?? a.assetId) === assetId);\n tokenBalance = asset ? Number(asset.amount) : 0;\n }\n if (tokenBalance <= 0) {\n throw new Error('No tokens to claim');\n }\n\n const atc = new AtomicTransactionComposer();\n\n // Token transfer to market app\n const tokenTransfer = await algokit.transferAsset(\n { from: signerAccount, to: marketAddress, amount: tokenBalance, assetId, skipSending: true },\n algodClient,\n );\n atc.addTransaction({ txn: tokenTransfer.transaction, signer });\n\n // claim() app call\n const claimTxn = await marketClient.claim(\n {},\n {\n assets: [usdcAssetId, assetId],\n sendParams: { skipSending: true, fee: algokit.microAlgos(1000) },\n },\n );\n atc.addTransaction({ txn: claimTxn.transaction, signer });\n\n // Opt-out: close remainder to market app\n const sp = await algodClient.getTransactionParams().do();\n const closeOutTxn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({\n from: activeAddress,\n to: marketAddress,\n amount: 0,\n assetIndex: assetId,\n closeRemainderTo: marketAddress,\n suggestedParams: sp,\n });\n atc.addTransaction({ txn: closeOutTxn, signer });\n\n const result = await atc.execute(algodClient, 4);\n\n return {\n success: true,\n txIds: result.txIDs,\n confirmedRound: result.confirmedRound,\n };\n};\n\n/**\n * Gets the wallet's token positions across all markets.\n *\n * Reads on-chain account info to find all ASA holdings, then maps\n * them to markets using indexer lookups.\n *\n * Note: This returns raw token balances. For cost basis and PnL,\n * use the Alpha API's position endpoints.\n *\n * @param config - Alpha client config\n * @param walletAddress - Optional wallet address (defaults to config.activeAddress)\n * @returns Array of wallet positions (market app ID + yes/no token balances)\n */\nexport const getPositions = async (\n config: AlphaClientConfig,\n walletAddress?: string,\n): Promise<WalletPosition[]> => {\n const { algodClient, indexerClient } = config;\n const address = walletAddress ?? config.activeAddress;\n\n // Get all ASA holdings\n const accountInfo = await algodClient.accountInformation(address).do();\n const assets = accountInfo.assets || accountInfo['assets'] || [];\n\n // Filter to non-zero holdings\n const nonZeroAssets = assets.filter((a: any) => Number(a.amount) > 0);\n if (nonZeroAssets.length === 0) return [];\n\n // For each asset, try to find the market it belongs to by looking up\n // the asset's creator (which is the market app address)\n const positions = new Map<number, WalletPosition>();\n\n for (const asset of nonZeroAssets) {\n const assetId = asset['asset-id'] ?? asset.assetId;\n const amount = Number(asset.amount);\n\n try {\n const assetInfo = await indexerClient.lookupAssetByID(assetId).do();\n const creator = assetInfo.asset?.params?.creator;\n if (!creator) continue;\n\n // Try to find a market app at this address\n const createdApps = await indexerClient.lookupAccountCreatedApplications(creator).limit(1).do();\n if (!createdApps.applications?.length) continue;\n\n // Read the market app's global state to confirm this is a market\n // and determine which token (yes/no) this asset is\n const appId = createdApps.applications[0].id;\n try {\n const appInfo = await indexerClient.lookupApplications(appId).do();\n const rawState = appInfo.application?.params?.['global-state'];\n if (!rawState) continue;\n\n let yesAssetIdOnChain = 0;\n let noAssetIdOnChain = 0;\n\n for (const item of rawState) {\n const key = Buffer.from(item.key, 'base64').toString();\n if (key === 'yes_asset_id') yesAssetIdOnChain = Number(item.value.uint);\n if (key === 'no_asset_id') noAssetIdOnChain = Number(item.value.uint);\n }\n\n if (yesAssetIdOnChain === 0 && noAssetIdOnChain === 0) continue;\n\n const existing = positions.get(appId) ?? {\n marketAppId: appId,\n yesAssetId: yesAssetIdOnChain,\n noAssetId: noAssetIdOnChain,\n yesBalance: 0,\n noBalance: 0,\n };\n\n if (assetId === yesAssetIdOnChain) {\n existing.yesBalance = amount;\n } else if (assetId === noAssetIdOnChain) {\n existing.noBalance = amount;\n } else {\n continue;\n }\n\n positions.set(appId, existing);\n } catch {\n continue;\n }\n } catch {\n continue;\n }\n }\n\n return Array.from(positions.values());\n};\n","import type { AlphaClientConfig, Market } from '../types.js';\n\nconst DEFAULT_API_BASE_URL = 'https://partners.alphaarcade.com/api';\n\n/**\n * Fetches all live, tradeable markets from the Alpha REST API.\n *\n * Paginates automatically through all results.\n *\n * @param config - Alpha client config\n * @returns Array of live markets\n */\nexport const getMarkets = async (config: AlphaClientConfig): Promise<Market[]> => {\n const baseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;\n const allMarkets: Market[] = [];\n let lastEvaluatedKey: string | undefined;\n let hasMore = true;\n\n while (hasMore) {\n const params = new URLSearchParams({ activeOnly: 'true', limit: '300' });\n if (lastEvaluatedKey) {\n params.set('lastEvaluatedKey', lastEvaluatedKey);\n }\n\n const url = `${baseUrl}/get-live-markets?${params.toString()}`;\n const response = await fetch(url, { headers: { 'x-api-key': config.apiKey } });\n\n if (!response.ok) {\n throw new Error(`Alpha API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n\n if (Array.isArray(data)) {\n allMarkets.push(...data);\n hasMore = false;\n } else if (data.markets) {\n allMarkets.push(...data.markets);\n lastEvaluatedKey = data.lastEvaluatedKey;\n hasMore = !!lastEvaluatedKey;\n } else {\n hasMore = false;\n }\n }\n\n return allMarkets;\n};\n\n/**\n * Fetches a single market by its ID from the Alpha REST API.\n *\n * @param config - Alpha client config\n * @param marketId - The market ID\n * @returns The market data, or null if not found\n */\nexport const getMarket = async (\n config: AlphaClientConfig,\n marketId: string,\n): Promise<Market | null> => {\n const baseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;\n const url = `${baseUrl}/get-market?marketId=${encodeURIComponent(marketId)}`;\n const response = await fetch(url, { headers: { 'x-api-key': config.apiKey } });\n\n if (!response.ok) {\n if (response.status === 404) return null;\n throw new Error(`Alpha API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.market ?? data ?? null;\n};\n","import type {\n AlphaClientConfig,\n CreateLimitOrderParams,\n CreateMarketOrderParams,\n CancelOrderParams,\n ProposeMatchParams,\n SplitSharesParams,\n MergeSharesParams,\n ClaimParams,\n CreateOrderResult,\n CreateMarketOrderResult,\n CancelOrderResult,\n ProposeMatchResult,\n SplitMergeResult,\n ClaimResult,\n Orderbook,\n OpenOrder,\n WalletPosition,\n Market,\n} from './types.js';\nimport {\n createLimitOrder,\n createMarketOrder,\n cancelOrder,\n proposeMatch,\n} from './modules/trading.js';\nimport {\n splitShares,\n mergeShares,\n claim,\n getPositions,\n} from './modules/positions.js';\nimport { getOrderbook, getOpenOrders } from './modules/orderbook.js';\nimport { getMarkets as fetchMarkets, getMarket as fetchMarket } from './modules/markets.js';\n\n/**\n * The main client for interacting with Alpha Market prediction markets on Algorand.\n *\n * Provides methods for:\n * - **Trading**: Create limit/market orders, cancel orders, propose matches\n * - **Positions**: Split/merge shares, claim resolved tokens, view positions\n * - **Orderbook**: Read on-chain orderbook for any market\n * - **Markets**: Fetch live markets from the Alpha API\n *\n * @example\n * ```typescript\n * import { AlphaClient } from '@alpha-market/sdk';\n * import algosdk from 'algosdk';\n *\n * const algodClient = new algosdk.Algodv2('', 'https://mainnet-api.algonode.cloud', 443);\n * const indexerClient = new algosdk.Indexer('', 'https://mainnet-idx.algonode.cloud', 443);\n * const account = algosdk.mnemonicToSecretKey('your mnemonic ...');\n * const signer = algosdk.makeBasicAccountTransactionSigner(account);\n *\n * const client = new AlphaClient({\n * algodClient,\n * indexerClient,\n * signer,\n * activeAddress: account.addr,\n * matcherAppId: 741347297,\n * usdcAssetId: 31566704,\n * feeAddress: 'FEE_ADDRESS_HERE',\n * });\n *\n * // Fetch markets\n * const markets = await client.getMarkets();\n *\n * // Place a limit order\n * const result = await client.createLimitOrder({\n * marketAppId: markets[0].marketAppId,\n * position: 1, // Yes\n * price: 500_000, // $0.50\n * quantity: 1_000_000, // 1 share\n * isBuying: true,\n * });\n * ```\n */\nexport class AlphaClient {\n private config: AlphaClientConfig;\n\n constructor(config: AlphaClientConfig) {\n if (!config.algodClient) throw new Error('algodClient is required');\n if (!config.indexerClient) throw new Error('indexerClient is required');\n if (!config.signer) throw new Error('signer is required');\n if (!config.activeAddress) throw new Error('activeAddress is required');\n if (!config.matcherAppId) throw new Error('matcherAppId is required');\n if (!config.usdcAssetId) throw new Error('usdcAssetId is required');\n if (!config.feeAddress) throw new Error('feeAddress is required');\n if (!config.apiKey) throw new Error('apiKey is required');\n\n this.config = {\n ...config,\n apiBaseUrl: config.apiBaseUrl ?? 'https://partners.alphaarcade.com/api',\n };\n }\n\n // ============================================\n // Trading\n // ============================================\n\n /**\n * Creates a limit order on a market.\n *\n * A limit order sits on the orderbook at your specified price until matched\n * or cancelled. Slippage is 0 — the order executes only at your exact price.\n *\n * @param params - Order parameters (marketAppId, position, price, quantity, isBuying)\n * @returns The created escrow app ID and transaction info\n */\n async createLimitOrder(params: CreateLimitOrderParams): Promise<CreateOrderResult> {\n return createLimitOrder(this.config, params);\n }\n\n /**\n * Creates a market order with automatic matching.\n *\n * Fetches the live orderbook, finds the best counterparty orders within your\n * slippage tolerance, then creates the order and proposes matches in a single\n * atomic transaction group.\n *\n * @param params - Order parameters (marketAppId, position, price, quantity, isBuying, slippage)\n * @returns The created escrow app ID, matched quantity, and transaction info\n */\n async createMarketOrder(params: CreateMarketOrderParams): Promise<CreateMarketOrderResult> {\n return createMarketOrder(this.config, params);\n }\n\n /**\n * Cancels an open order by deleting its escrow app.\n *\n * Returns the escrowed funds (USDC or outcome tokens) to the order owner,\n * and reclaims the ALGO minimum balance used by the escrow app.\n *\n * @param params - Cancel parameters (marketAppId, escrowAppId, orderOwner)\n * @returns Whether the cancellation succeeded\n */\n async cancelOrder(params: CancelOrderParams): Promise<CancelOrderResult> {\n return cancelOrder(this.config, params);\n }\n\n /**\n * Proposes a match between an existing maker order and a new taker order.\n *\n * Use this for advanced matching scenarios where you want to explicitly\n * specify which orders to match against.\n *\n * @param params - Match parameters (marketAppId, makerEscrowAppId, makerAddress, quantityMatched)\n * @returns Whether the match succeeded\n */\n async proposeMatch(params: ProposeMatchParams): Promise<ProposeMatchResult> {\n return proposeMatch(this.config, params);\n }\n\n // ============================================\n // Positions\n // ============================================\n\n /**\n * Splits USDC into equal amounts of YES and NO outcome tokens.\n *\n * For example, splitting 1 USDC gives you 1 YES token + 1 NO token.\n * Together they're always worth $1.00 — you can trade them independently.\n *\n * @param params - Split parameters (marketAppId, amount in microunits)\n * @returns Transaction result\n */\n async splitShares(params: SplitSharesParams): Promise<SplitMergeResult> {\n return splitShares(this.config, params);\n }\n\n /**\n * Merges equal amounts of YES and NO tokens back into USDC.\n *\n * The inverse of split. 1 YES + 1 NO = 1 USDC, always.\n *\n * @param params - Merge parameters (marketAppId, amount in microunits)\n * @returns Transaction result\n */\n async mergeShares(params: MergeSharesParams): Promise<SplitMergeResult> {\n return mergeShares(this.config, params);\n }\n\n /**\n * Claims USDC from a resolved market by redeeming outcome tokens.\n *\n * - Winning tokens: redeemed 1:1 for USDC\n * - Voided market: redeemed at half value\n * - Losing tokens: burned (no USDC returned)\n *\n * @param params - Claim parameters (marketAppId, assetId, optional amount)\n * @returns Transaction result\n */\n async claim(params: ClaimParams): Promise<ClaimResult> {\n return claim(this.config, params);\n }\n\n /**\n * Gets all token positions for a wallet across all markets.\n *\n * Reads on-chain account info and maps ASA holdings to markets.\n * Returns raw token balances (YES/NO amounts per market).\n *\n * @param walletAddress - Optional wallet (defaults to activeAddress)\n * @returns Array of positions with market app IDs and token balances\n */\n async getPositions(walletAddress?: string): Promise<WalletPosition[]> {\n return getPositions(this.config, walletAddress);\n }\n\n // ============================================\n // Orderbook\n // ============================================\n\n /**\n * Fetches the full on-chain orderbook for a market.\n *\n * Reads all escrow apps created by the market contract, decodes their\n * global state, and organizes into yes/no bids and asks.\n * Only includes limit orders (slippage = 0) with unfilled quantity.\n *\n * @param marketAppId - The market app ID\n * @returns Orderbook with yes and no sides, each having bids and asks\n */\n async getOrderbook(marketAppId: number): Promise<Orderbook> {\n return getOrderbook(this.config, marketAppId);\n }\n\n /**\n * Gets open orders for a specific wallet on a market.\n *\n * @param marketAppId - The market app ID\n * @param walletAddress - Optional wallet (defaults to activeAddress)\n * @returns Array of open orders\n */\n async getOpenOrders(marketAppId: number, walletAddress?: string): Promise<OpenOrder[]> {\n return getOpenOrders(this.config, marketAppId, walletAddress);\n }\n\n // ============================================\n // Markets\n // ============================================\n\n /**\n * Fetches all live, tradeable markets from the Alpha API.\n *\n * Automatically paginates to retrieve all markets.\n *\n * @returns Array of live markets\n */\n async getMarkets(): Promise<Market[]> {\n return fetchMarkets(this.config);\n }\n\n /**\n * Fetches a single market by its ID.\n *\n * @param marketId - The market ID\n * @returns The market data, or null if not found\n */\n async getMarket(marketId: string): Promise<Market | null> {\n return fetchMarket(this.config, marketId);\n }\n}\n"]}