{ "name": "FixChainEscrow", "structs": {}, "methods": [ { "name": "create_application", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Initialize the escrow contract application.", "events": [], "recommendations": {} }, { "name": "initialize_escrow", "args": [ { "type": "address", "name": "customer" }, { "type": "address", "name": "worker" }, { "type": "uint64", "name": "service_amount" }, { "type": "uint64", "name": "commitment_deposit" }, { "type": "pay", "name": "pay_txn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Locks initial funds into the contract escrow.\npay_txn must deposit at least (service_amount + commitment_deposit) to the contract address.", "events": [], "recommendations": {} }, { "name": "top_up_escrow", "args": [ { "type": "pay", "name": "pay_txn" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Appends additional funds for newly approved extra work or parts requested by the worker.", "events": [], "recommendations": {} }, { "name": "release_escrow", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Case 1: Job Completed Successfully.\nTransfers (service_amount + additional_amount) to Worker. Refunds commitment_deposit back to Customer.", "events": [], "recommendations": {} }, { "name": "refund_customer_before_visit", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Case 2: Customer Cancels Before Worker Visit.\nRefunds full locked funds (service + deposit + additional) back to Customer.", "events": [], "recommendations": {} }, { "name": "compensate_worker_on_decline", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Case 3: Worker Declines After Inspection or Customer Cancels Post-Visit.\nRefunds service_amount (+ additional_amount) to Customer. Pays commitment_deposit to Worker for travel & inspection effort.", "events": [], "recommendations": {} }, { "name": "raise_dispute", "args": [ { "type": "string", "name": "reason" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Case 5: Freezes escrow in DISPUTED state when customer or worker flags an issue.", "events": [], "recommendations": {} }, { "name": "resolve_dispute", "args": [ { "type": "uint64", "name": "worker_amount" }, { "type": "uint64", "name": "customer_amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Admin arbitration tool to distribute locked dispute funds.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "\n FixChain AI Algorand Smart Contract Escrow.\n Provides automated, tamper-proof escrow management for home service bookings:\n - Funds locking (Service Amount + Commitment Deposit)\n - Additional work top-up locking\n - Automated payment releases to Worker & deposit refunds to Customer on completion\n - Cancellation refunds to Customer\n - Worker travel/inspection compensation on decline\n - Frozen escrow during active disputes & Admin dispute resolution\n ", "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 3 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "address", "key": "YWRtaW4=" }, "customer": { "keyType": "AVMString", "valueType": "address", "key": "Y3VzdG9tZXI=" }, "worker": { "keyType": "AVMString", "valueType": "address", "key": "d29ya2Vy" }, "service_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2VydmljZV9hbW91bnQ=" }, "commitment_deposit": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y29tbWl0bWVudF9kZXBvc2l0" }, "additional_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YWRkaXRpb25hbF9hbW91bnQ=" }, "status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c3RhdHVz" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 231 ], "errorMessage": "Escrow already initialized" }, { "pc": [ 291, 330, 436, 519, 645 ], "errorMessage": "Escrow is not active" }, { "pc": [ 705 ], "errorMessage": "Escrow is not in dispute" }, { "pc": [ 714 ], "errorMessage": "Only admin can resolve dispute" }, { "pc": [ 300 ], "errorMessage": "Only customer can top up escrow" }, { "pc": [ 353 ], "errorMessage": "Only customer or admin can release escrow" }, { "pc": [ 459 ], "errorMessage": "Only customer or admin can trigger refund" }, { "pc": [ 667 ], "errorMessage": "Only customer or worker can raise dispute" }, { "pc": [ 249 ], "errorMessage": "Payment amount insufficient to cover escrow lock" }, { "pc": [ 244, 307 ], "errorMessage": "Payment must be sent to escrow application" }, { "pc": [ 552 ], "errorMessage": "Unauthorized caller" }, { "pc": [ 311, 362, 474, 561 ], "errorMessage": "check self.additional_amount exists" }, { "pc": [ 347, 453, 546, 712 ], "errorMessage": "check self.admin exists" }, { "pc": [ 374, 469, 573 ], "errorMessage": "check self.commitment_deposit exists" }, { "pc": [ 298, 336, 405, 442, 486, 535, 581, 651, 744 ], "errorMessage": "check self.customer exists" }, { "pc": [ 358, 464, 557 ], "errorMessage": "check self.service_amount exists" }, { "pc": [ 229, 288, 327, 433, 516, 642, 701 ], "errorMessage": "check self.status exists" }, { "pc": [ 382, 525, 603, 661, 722 ], "errorMessage": "check self.worker exists" }, { "pc": [ 632 ], "errorMessage": "invalid array length header" }, { "pc": [ 638 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 188, 197 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 205, 214, 685, 695 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 225, 284 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAyCiAgICBieXRlY2Jsb2NrICJzdGF0dXMiICJjdXN0b21lciIgIndvcmtlciIgImFkZGl0aW9uYWxfYW1vdW50IiAiYWRtaW4iICJzZXJ2aWNlX2Ftb3VudCIgImNvbW1pdG1lbnRfZGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTQKICAgIC8vIGNsYXNzIEZpeENoYWluRXNjcm93KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDExCiAgICBwdXNoYnl0ZXNzIDB4NWU5ZTZkODYgMHhmNzBmZDA1ZCAweDIxOWY2NzY2IDB4OTg1MTAwMTQgMHg2MmVmN2Y0NiAweGU2NGEwZDFiIDB4OWUyYjIwMmUgLy8gbWV0aG9kICJpbml0aWFsaXplX2VzY3JvdyhhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAidG9wX3VwX2VzY3JvdyhwYXkpdm9pZCIsIG1ldGhvZCAicmVsZWFzZV9lc2Nyb3coKXZvaWQiLCBtZXRob2QgInJlZnVuZF9jdXN0b21lcl9iZWZvcmVfdmlzaXQoKXZvaWQiLCBtZXRob2QgImNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmUoKXZvaWQiLCBtZXRob2QgInJhaXNlX2Rpc3B1dGUoc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlc29sdmVfZGlzcHV0ZSh1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBpbml0aWFsaXplX2VzY3JvdyB0b3BfdXBfZXNjcm93IHJlbGVhc2VfZXNjcm93IHJlZnVuZF9jdXN0b21lcl9iZWZvcmVfdmlzaXQgY29tcGVuc2F0ZV93b3JrZXJfb25fZGVjbGluZSByYWlzZV9kaXNwdXRlIHJlc29sdmVfZGlzcHV0ZQogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNAogICAgLy8gY2xhc3MgRml4Q2hhaW5Fc2Nyb3coQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweDc1MmMzYWMwIC8vIG1ldGhvZCAiY3JlYXRlX2FwcGxpY2F0aW9uKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlX2FwcGxpY2F0aW9uCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMuZml4Y2hhaW5fZXNjcm93LmNvbnRyYWN0LkZpeENoYWluRXNjcm93LmNyZWF0ZV9hcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NDUKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZml4Y2hhaW5fZXNjcm93LmNvbnRyYWN0LkZpeENoYWluRXNjcm93LmluaXRpYWxpemVfZXNjcm93W3JvdXRpbmddKCkgLT4gdm9pZDoKaW5pdGlhbGl6ZV9lc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo2MQogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzID09IFVJbnQ2NCgwKSwgIkVzY3JvdyBhbHJlYWR5IGluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRXNjcm93IGFscmVhZHkgaW5pdGlhbGl6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NjIKICAgIC8vIHRvdGFsX3JlcXVpcmVkID0gc2VydmljZV9hbW91bnQgKyBjb21taXRtZW50X2RlcG9zaXQKICAgIGRpZyAyCiAgICBkaWcgMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo2MwogICAgLy8gYXNzZXJ0IHBheV90eG4ucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIlBheW1lbnQgbXVzdCBiZSBzZW50IHRvIGVzY3JvdyBhcHBsaWNhdGlvbiIKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHNlbnQgdG8gZXNjcm93IGFwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjY0CiAgICAvLyBhc3NlcnQgcGF5X3R4bi5hbW91bnQgPj0gdG90YWxfcmVxdWlyZWQsICJQYXltZW50IGFtb3VudCBpbnN1ZmZpY2llbnQgdG8gY292ZXIgZXNjcm93IGxvY2siCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIDw9CiAgICBhc3NlcnQgLy8gUGF5bWVudCBhbW91bnQgaW5zdWZmaWNpZW50IHRvIGNvdmVyIGVzY3JvdyBsb2NrCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLmN1c3RvbWVyID0gY3VzdG9tZXIKICAgIGJ5dGVjXzEgLy8gImN1c3RvbWVyIgogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo2NwogICAgLy8gc2VsZi53b3JrZXIgPSB3b3JrZXIKICAgIGJ5dGVjXzIgLy8gIndvcmtlciIKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NjgKICAgIC8vIHNlbGYuc2VydmljZV9hbW91bnQgPSBzZXJ2aWNlX2Ftb3VudAogICAgYnl0ZWMgNSAvLyAic2VydmljZV9hbW91bnQiCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmNvbW1pdG1lbnRfZGVwb3NpdCA9IGNvbW1pdG1lbnRfZGVwb3NpdAogICAgYnl0ZWMgNiAvLyAiY29tbWl0bWVudF9kZXBvc2l0IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NzAKICAgIC8vIHNlbGYuYWRkaXRpb25hbF9hbW91bnQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzMgLy8gImFkZGl0aW9uYWxfYW1vdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NCgxKSAgIyBBQ1RJVkUgLyBMT0NLRUQKICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmZpeGNoYWluX2VzY3Jvdy5jb250cmFjdC5GaXhDaGFpbkVzY3Jvdy50b3BfdXBfZXNjcm93W3JvdXRpbmddKCkgLT4gdm9pZDoKdG9wX3VwX2VzY3JvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMgPT0gVUludDY0KDEpLCAiRXNjcm93IGlzIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBhc3NlcnQgcGF5X3R4bi5zZW5kZXIgPT0gc2VsZi5jdXN0b21lciwgIk9ubHkgY3VzdG9tZXIgY2FuIHRvcCB1cCBlc2Nyb3ciCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImN1c3RvbWVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmN1c3RvbWVyIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGN1c3RvbWVyIGNhbiB0b3AgdXAgZXNjcm93CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjgwCiAgICAvLyBhc3NlcnQgcGF5X3R4bi5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAiUGF5bWVudCBtdXN0IGJlIHNlbnQgdG8gZXNjcm93IGFwcGxpY2F0aW9uIgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCBtdXN0IGJlIHNlbnQgdG8gZXNjcm93IGFwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjgyCiAgICAvLyBzZWxmLmFkZGl0aW9uYWxfYW1vdW50ICs9IHBheV90eG4uYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWRkaXRpb25hbF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRkaXRpb25hbF9hbW91bnQgZXhpc3RzCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgICsKICAgIGJ5dGVjXzMgLy8gImFkZGl0aW9uYWxfYW1vdW50IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5maXhjaGFpbl9lc2Nyb3cuY29udHJhY3QuRml4Q2hhaW5Fc2Nyb3cucmVsZWFzZV9lc2Nyb3dbcm91dGluZ10oKSAtPiB2b2lkOgpyZWxlYXNlX2VzY3JvdzoKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjkxCiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMgPT0gVUludDY0KDEpLCAiRXNjcm93IGlzIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIgb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY3VzdG9tZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3VzdG9tZXIgZXhpc3RzCiAgICA9PQogICAgYm56IHJlbGVhc2VfZXNjcm93X2Jvb2xfdHJ1ZUAzCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYnogcmVsZWFzZV9lc2Nyb3dfYm9vbF9mYWxzZUA0CgpyZWxlYXNlX2VzY3Jvd19ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgpyZWxlYXNlX2VzY3Jvd19ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjkyLTk0CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIFR4bi5zZW5kZXIgPT0gc2VsZi5jdXN0b21lciBvciBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4KICAgIC8vICksICJPbmx5IGN1c3RvbWVyIG9yIGFkbWluIGNhbiByZWxlYXNlIGVzY3JvdyIKICAgIGFzc2VydCAvLyBPbmx5IGN1c3RvbWVyIG9yIGFkbWluIGNhbiByZWxlYXNlIGVzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo5NgogICAgLy8gd29ya2VyX3BheW91dCA9IHNlbGYuc2VydmljZV9hbW91bnQgKyBzZWxmLmFkZGl0aW9uYWxfYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAic2VydmljZV9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2VydmljZV9hbW91bnQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYWRkaXRpb25hbF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRkaXRpb25hbF9hbW91bnQgZXhpc3RzCiAgICArCiAgICBkdXAKICAgIGJ1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weTo5NwogICAgLy8gY3VzdG9tZXJfcmVmdW5kID0gc2VsZi5jb21taXRtZW50X2RlcG9zaXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjb21taXRtZW50X2RlcG9zaXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgYnVyeSA0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb21taXRtZW50X2RlcG9zaXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBpZiB3b3JrZXJfcGF5b3V0ID4gMDoKICAgIGJ6IHJlbGVhc2VfZXNjcm93X2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDAtMTA0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi53b3JrZXIsCiAgICAvLyAgICAgYW1vdW50PXdvcmtlcl9wYXlvdXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjEwMQogICAgLy8gcmVjZWl2ZXI9c2VsZi53b3JrZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAid29ya2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLndvcmtlciBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDAKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTAzCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDAtMTA0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi53b3JrZXIsCiAgICAvLyAgICAgYW1vdW50PXdvcmtlcl9wYXlvdXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcmVsZWFzZV9lc2Nyb3dfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDYKICAgIC8vIGlmIGN1c3RvbWVyX3JlZnVuZCA+IDA6CiAgICBkaWcgMQogICAgYnogcmVsZWFzZV9lc2Nyb3dfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDctMTExCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jdXN0b21lciwKICAgIC8vICAgICBhbW91bnQ9Y3VzdG9tZXJfcmVmdW5kLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMDgKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3VzdG9tZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY3VzdG9tZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3VzdG9tZXIgZXhpc3RzCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTA3CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjExMAogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTA3LTExMQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYuY3VzdG9tZXIsCiAgICAvLyAgICAgYW1vdW50PWN1c3RvbWVyX3JlZnVuZCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpyZWxlYXNlX2VzY3Jvd19hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMTMKICAgIC8vIHNlbGYuc3RhdHVzID0gVUludDY0KDIpICAjIFJFTEVBU0VECiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBpbnRjXzMgLy8gMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcmVsZWFzZV9lc2Nyb3dfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgcmVsZWFzZV9lc2Nyb3dfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLmZpeGNoYWluX2VzY3Jvdy5jb250cmFjdC5GaXhDaGFpbkVzY3Jvdy5yZWZ1bmRfY3VzdG9tZXJfYmVmb3JlX3Zpc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVmdW5kX2N1c3RvbWVyX2JlZm9yZV92aXNpdDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMjEKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1cyA9PSBVSW50NjQoMSksICJFc2Nyb3cgaXMgbm90IGFjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gRXNjcm93IGlzIG5vdCBhY3RpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTIzCiAgICAvLyBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIgb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY3VzdG9tZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3VzdG9tZXIgZXhpc3RzCiAgICA9PQogICAgYm56IHJlZnVuZF9jdXN0b21lcl9iZWZvcmVfdmlzaXRfYm9vbF90cnVlQDMKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICBieiByZWZ1bmRfY3VzdG9tZXJfYmVmb3JlX3Zpc2l0X2Jvb2xfZmFsc2VANAoKcmVmdW5kX2N1c3RvbWVyX2JlZm9yZV92aXNpdF9ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgpyZWZ1bmRfY3VzdG9tZXJfYmVmb3JlX3Zpc2l0X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTIyLTEyNAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIgb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluCiAgICAvLyApLCAiT25seSBjdXN0b21lciBvciBhZG1pbiBjYW4gdHJpZ2dlciByZWZ1bmQiCiAgICBhc3NlcnQgLy8gT25seSBjdXN0b21lciBvciBhZG1pbiBjYW4gdHJpZ2dlciByZWZ1bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTI3CiAgICAvLyBzZWxmLnNlcnZpY2VfYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAic2VydmljZV9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2VydmljZV9hbW91bnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjEyOAogICAgLy8gKyBzZWxmLmNvbW1pdG1lbnRfZGVwb3NpdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImNvbW1pdG1lbnRfZGVwb3NpdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb21taXRtZW50X2RlcG9zaXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjEyNy0xMjgKICAgIC8vIHNlbGYuc2VydmljZV9hbW91bnQKICAgIC8vICsgc2VsZi5jb21taXRtZW50X2RlcG9zaXQKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTI5CiAgICAvLyArIHNlbGYuYWRkaXRpb25hbF9hbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJhZGRpdGlvbmFsX2Ftb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZGRpdGlvbmFsX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTI3LTEyOQogICAgLy8gc2VsZi5zZXJ2aWNlX2Ftb3VudAogICAgLy8gKyBzZWxmLmNvbW1pdG1lbnRfZGVwb3NpdAogICAgLy8gKyBzZWxmLmFkZGl0aW9uYWxfYW1vdW50CiAgICArCiAgICBkdXAKICAgIGJ1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMzIKICAgIC8vIGlmIHRvdGFsX3JlZnVuZCA+IDA6CiAgICBieiByZWZ1bmRfY3VzdG9tZXJfYmVmb3JlX3Zpc2l0X2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMzMtMTM3CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jdXN0b21lciwKICAgIC8vICAgICBhbW91bnQ9dG90YWxfcmVmdW5kLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxMzQKICAgIC8vIHJlY2VpdmVyPXNlbGYuY3VzdG9tZXIsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY3VzdG9tZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY3VzdG9tZXIgZXhpc3RzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTMzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTMzLTEzNwogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYuY3VzdG9tZXIsCiAgICAvLyAgICAgYW1vdW50PXRvdGFsX3JlZnVuZCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpyZWZ1bmRfY3VzdG9tZXJfYmVmb3JlX3Zpc2l0X2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTM5CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NCgzKSAgIyBDQU5DRUxMRURfUkVGVU5ERUQKICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIHB1c2hpbnQgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnJlZnVuZF9jdXN0b21lcl9iZWZvcmVfdmlzaXRfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgcmVmdW5kX2N1c3RvbWVyX2JlZm9yZV92aXNpdF9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuZml4Y2hhaW5fZXNjcm93LmNvbnRyYWN0LkZpeENoYWluRXNjcm93LmNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVbcm91dGluZ10oKSAtPiB2b2lkOgpjb21wZW5zYXRlX3dvcmtlcl9vbl9kZWNsaW5lOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTQ4CiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMgPT0gVUludDY0KDEpLCAiRXNjcm93IGlzIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE1MAogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLndvcmtlcgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIndvcmtlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53b3JrZXIgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNTAtMTUyCiAgICAvLyBUeG4uc2VuZGVyID09IHNlbGYud29ya2VyCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbgogICAgYm56IGNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYm9vbF90cnVlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTUxCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjdXN0b21lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jdXN0b21lciBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE1MC0xNTIKICAgIC8vIFR4bi5zZW5kZXIgPT0gc2VsZi53b3JrZXIKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5jdXN0b21lcgogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluCiAgICBibnogY29tcGVuc2F0ZV93b3JrZXJfb25fZGVjbGluZV9ib29sX3RydWVANAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNTIKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTUwLTE1MgogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLndvcmtlcgogICAgLy8gb3IgVHhuLnNlbmRlciA9PSBzZWxmLmN1c3RvbWVyCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4KICAgIGJ6IGNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYm9vbF9mYWxzZUA1Cgpjb21wZW5zYXRlX3dvcmtlcl9vbl9kZWNsaW5lX2Jvb2xfdHJ1ZUA0OgogICAgaW50Y18xIC8vIDEKCmNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYm9vbF9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNDktMTUzCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIFR4bi5zZW5kZXIgPT0gc2VsZi53b3JrZXIKICAgIC8vICAgICBvciBUeG4uc2VuZGVyID09IHNlbGYuY3VzdG9tZXIKICAgIC8vICAgICBvciBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4KICAgIC8vICksICJVbmF1dGhvcml6ZWQgY2FsbGVyIgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZCBjYWxsZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTU1CiAgICAvLyBjdXN0b21lcl9yZWZ1bmQgPSBzZWxmLnNlcnZpY2VfYW1vdW50ICsgc2VsZi5hZGRpdGlvbmFsX2Ftb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInNlcnZpY2VfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNlcnZpY2VfYW1vdW50IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFkZGl0aW9uYWxfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkZGl0aW9uYWxfYW1vdW50IGV4aXN0cwogICAgKwogICAgZHVwCiAgICBidXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTU2CiAgICAvLyB3b3JrZXJfY29tcGVuc2F0aW9uID0gc2VsZi5jb21taXRtZW50X2RlcG9zaXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJjb21taXRtZW50X2RlcG9zaXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgYnVyeSAzCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb21taXRtZW50X2RlcG9zaXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE1OAogICAgLy8gaWYgY3VzdG9tZXJfcmVmdW5kID4gMDoKICAgIGJ6IGNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE1OS0xNjMKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmN1c3RvbWVyLAogICAgLy8gICAgIGFtb3VudD1jdXN0b21lcl9yZWZ1bmQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE2MAogICAgLy8gcmVjZWl2ZXI9c2VsZi5jdXN0b21lciwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjdXN0b21lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jdXN0b21lciBleGlzdHMKICAgIGRpZyAyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNTkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTYyCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNTktMTYzCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5jdXN0b21lciwKICAgIC8vICAgICBhbW91bnQ9Y3VzdG9tZXJfcmVmdW5kLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNjUKICAgIC8vIGlmIHdvcmtlcl9jb21wZW5zYXRpb24gPiAwOgogICAgZHVwCiAgICBieiBjb21wZW5zYXRlX3dvcmtlcl9vbl9kZWNsaW5lX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTY2LTE3MAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYud29ya2VyLAogICAgLy8gICAgIGFtb3VudD13b3JrZXJfY29tcGVuc2F0aW9uLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNjcKICAgIC8vIHJlY2VpdmVyPXNlbGYud29ya2VyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIndvcmtlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53b3JrZXIgZXhpc3RzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTY2CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE2OQogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTY2LTE3MAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYud29ya2VyLAogICAgLy8gICAgIGFtb3VudD13b3JrZXJfY29tcGVuc2F0aW9uLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmNvbXBlbnNhdGVfd29ya2VyX29uX2RlY2xpbmVfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTcyCiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NCg0KSAgIyBERUNMSU5FRF9DT01QRU5TQVRFRAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgcHVzaGludCA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY29tcGVuc2F0ZV93b3JrZXJfb25fZGVjbGluZV9ib29sX2ZhbHNlQDU6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjb21wZW5zYXRlX3dvcmtlcl9vbl9kZWNsaW5lX2Jvb2xfbWVyZ2VANgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5maXhjaGFpbl9lc2Nyb3cuY29udHJhY3QuRml4Q2hhaW5Fc2Nyb3cucmFpc2VfZGlzcHV0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJhaXNlX2Rpc3B1dGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTc5CiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMgPT0gVUludDY0KDEpLCAiRXNjcm93IGlzIG5vdCBhY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBub3QgYWN0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE4MQogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLmN1c3RvbWVyIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi53b3JrZXIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjdXN0b21lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jdXN0b21lciBleGlzdHMKICAgID09CiAgICBibnogcmFpc2VfZGlzcHV0ZV9ib29sX3RydWVAMwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIndvcmtlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53b3JrZXIgZXhpc3RzCiAgICA9PQogICAgYnogcmFpc2VfZGlzcHV0ZV9ib29sX2ZhbHNlQDQKCnJhaXNlX2Rpc3B1dGVfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKcmFpc2VfZGlzcHV0ZV9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE4MC0xODIKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSBzZWxmLmN1c3RvbWVyIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi53b3JrZXIKICAgIC8vICksICJPbmx5IGN1c3RvbWVyIG9yIHdvcmtlciBjYW4gcmFpc2UgZGlzcHV0ZSIKICAgIGFzc2VydCAvLyBPbmx5IGN1c3RvbWVyIG9yIHdvcmtlciBjYW4gcmFpc2UgZGlzcHV0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxODQKICAgIC8vIHNlbGYuc3RhdHVzID0gVUludDY0KDUpICAjIERJU1BVVEVECiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBwdXNoaW50IDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpyYWlzZV9kaXNwdXRlX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIHJhaXNlX2Rpc3B1dGVfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLmZpeGNoYWluX2VzY3Jvdy5jb250cmFjdC5GaXhDaGFpbkVzY3Jvdy5yZXNvbHZlX2Rpc3B1dGVbcm91dGluZ10oKSAtPiB2b2lkOgpyZXNvbHZlX2Rpc3B1dGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTkxCiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMgPT0gVUludDY0KDUpLCAiRXNjcm93IGlzIG5vdCBpbiBkaXNwdXRlIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQgLy8gRXNjcm93IGlzIG5vdCBpbiBkaXNwdXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE5MgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgIk9ubHkgYWRtaW4gY2FuIHJlc29sdmUgZGlzcHV0ZSIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBhZG1pbiBjYW4gcmVzb2x2ZSBkaXNwdXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE5NAogICAgLy8gaWYgd29ya2VyX2Ftb3VudCA+IDA6CiAgICBieiByZXNvbHZlX2Rpc3B1dGVfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE5NS0xOTkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLndvcmtlciwKICAgIC8vICAgICBhbW91bnQ9d29ya2VyX2Ftb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MTk2CiAgICAvLyByZWNlaXZlcj1zZWxmLndvcmtlciwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJ3b3JrZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYud29ya2VyIGV4aXN0cwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE5NQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToxOTgKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE5NS0xOTkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLndvcmtlciwKICAgIC8vICAgICBhbW91bnQ9d29ya2VyX2Ftb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpyZXNvbHZlX2Rpc3B1dGVfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToyMDEKICAgIC8vIGlmIGN1c3RvbWVyX2Ftb3VudCA+IDA6CiAgICBkdXAKICAgIGJ6IHJlc29sdmVfZGlzcHV0ZV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MjAyLTIwNgogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYuY3VzdG9tZXIsCiAgICAvLyAgICAgYW1vdW50PWN1c3RvbWVyX2Ftb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MjAzCiAgICAvLyByZWNlaXZlcj1zZWxmLmN1c3RvbWVyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImN1c3RvbWVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmN1c3RvbWVyIGV4aXN0cwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjIwMgogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2ZpeGNoYWluX2VzY3Jvdy9jb250cmFjdC5weToyMDUKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjIwMi0yMDYKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLmN1c3RvbWVyLAogICAgLy8gICAgIGFtb3VudD1jdXN0b21lcl9hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcmVzb2x2ZV9kaXNwdXRlX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9maXhjaGFpbl9lc2Nyb3cvY29udHJhY3QucHk6MjA4CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NCgyKSAgIyBSRVNPTFZFRAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgaW50Y18zIC8vIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZml4Y2hhaW5fZXNjcm93L2NvbnRyYWN0LnB5OjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEIAiYHBnN0YXR1cwhjdXN0b21lcgZ3b3JrZXIRYWRkaXRpb25hbF9hbW91bnQFYWRtaW4Oc2VydmljZV9hbW91bnQSY29tbWl0bWVudF9kZXBvc2l0MRkURDEYQQA5ggcEXp5thgT3D9BdBCGfZ2YEmFEAFARi739GBOZKDRsEnisgLjYaAI4HABkAeACmAREBYwHYAgsAgAR1LDrANhoAjgEAAQAnBDEAZygiZyNDNhoBSRWBIBJENhoCSRWBIBJENhoDSRUkEkQXNhoESRUkEkQXMRYjCUk4ECMSRCIoZUQUREsCSwIISwE4BzIKEkRMOAgORClPBGcqTwNnJwVPAmcnBkxnKyJnKCNnI0MxFiMJSTgQIxJEIihlRCMSREk4ACIpZUQSREk4BzIKEkQiK2VETDgICCtMZyNDgABJIihlRCMSRDEAIillRBJAAAsxACInBGVEEkEASCNEIicFZUQiK2VECElFAiInBmVMRQREQQASsSIqZURLAbIIsgcjshAisgGzSwFBABKxIillREsCsgiyByOyECKyAbMoJWcjQyJC/7WAACIoZUQjEkQxACIpZUQSQAALMQAiJwRlRBJBADAjRCInBWVEIicGZUQIIitlRAhJRQJBABKxIillREsBsgiyByOyECKyAbMogQNnI0MiQv/NgABJIihlRCMSRDEAIiplRBJAABUxACIpZUQSQAALMQAiJwRlRBJBAEgjRCInBWVEIitlRAhJRQMiJwZlTEUDREEAErEiKWVESwKyCLIHI7IQIrIBs0lBABKxIiplREsBsgiyByOyECKyAbMogQRnI0MiQv+1NhoBSSJZJQhMFRJEIihlRCMSRDEAIillRBJAAAoxACIqZUQSQQAII0QogQVnI0MiQv/1NhoBSRUkEkQXSTYaAkkVJBJEF0wiKGVEgQUSRDEAIicEZUQSREEAErEiKmVESwKyCLIHI7IQIrIBs0lBABKxIillREsBsgiyByOyECKyAbMoJWcjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 9, "patch": 0 } }, "events": [], "templateVariables": {} }