{ "name": "TrustExperiments", "structs": { "ExperimentGroup": [ { "name": "exp_id", "type": "uint32" }, { "name": "owner", "type": "address" }, { "name": "name", "type": "string" }, { "name": "created_at", "type": "uint64" }, { "name": "variation_count", "type": "uint64" } ], "VariationInfo": [ { "name": "var_id", "type": "uint32" }, { "name": "app_id", "type": "uint64" }, { "name": "label", "type": "string" }, { "name": "created_at", "type": "uint64" } ] }, "methods": [ { "name": "create", "args": [ { "type": "uint64", "name": "registry_app" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_trust_variation_program", "args": [ { "type": "byte[]", "name": "approval" }, { "type": "byte[]", "name": "clear" }, { "type": "pay", "name": "mbr_payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "opt_in_to_asset", "args": [ { "type": "uint64", "name": "asset_id" }, { "type": "pay", "name": "mbr_payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "One-time per-asset setup: opt the TrustExperiments app account into\nan ASA so it can receive escrow asset-transfer legs from experimenters. Idempotent \u2014 no-op if already opted in. Caller pays the 0.1 ALGO MBR that the opt-in adds to this contract's account.", "events": [], "recommendations": {} }, { "name": "create_experiment", "args": [ { "type": "string", "name": "name" } ], "returns": { "type": "uint32" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_variation", "args": [ { "type": "uint32", "name": "exp_id" }, { "type": "string", "name": "label" }, { "type": "uint64", "name": "e1" }, { "type": "uint64", "name": "e2" }, { "type": "uint64", "name": "multiplier" }, { "type": "uint64", "name": "unit" }, { "type": "uint64", "name": "asset_id" }, { "type": "uint64", "name": "max_participants" }, { "type": "pay", "name": "mbr_payment" }, { "type": "txn", "name": "escrow_funding" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_experiment_with_variation", "args": [ { "type": "string", "name": "name" }, { "type": "string", "name": "label" }, { "type": "uint64", "name": "e1" }, { "type": "uint64", "name": "e2" }, { "type": "uint64", "name": "multiplier" }, { "type": "uint64", "name": "unit" }, { "type": "uint64", "name": "asset_id" }, { "type": "uint64", "name": "max_participants" }, { "type": "pay", "name": "mbr_payment" }, { "type": "txn", "name": "escrow_funding" } ], "returns": { "type": "(uint32,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_experiment", "args": [ { "type": "uint32", "name": "exp_id" } ], "returns": { "type": "(uint32,address,string,uint64,uint64)", "struct": "ExperimentGroup" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_variation", "args": [ { "type": "uint32", "name": "exp_id" }, { "type": "uint32", "name": "var_id" } ], "returns": { "type": "(uint32,uint64,string,uint64)", "struct": "VariationInfo" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 2, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "registry_app": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmVnaXN0cnlfYXBw" }, "experiment_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZXhwZXJpbWVudF9jb3VudA==" } }, "local": {}, "box": { "tv_approval": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "dHZfYXBwcm92YWw=" }, "tv_clear": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "dHZfY2xlYXI=" } } }, "maps": { "global": {}, "local": {}, "box": { "experiments": { "keyType": "uint32", "valueType": "ExperimentGroup", "prefix": "ZV8=" }, "variations": { "keyType": "uint64", "valueType": "VariationInfo", "prefix": "dl8=" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 314 ], "errorMessage": "Asset ID must be > 0" }, { "pc": [ 629, 958, 1134, 1488 ], "errorMessage": "Escrow must be > 0" }, { "pc": [ 938, 1468 ], "errorMessage": "Escrow must be AssetTransfer for ASA" }, { "pc": [ 616, 1121 ], "errorMessage": "Escrow must be Payment for ALGO" }, { "pc": [ 556, 1519 ], "errorMessage": "Experiment not found" }, { "pc": [ 329, 604, 1109 ], "errorMessage": "MBR must be >= 0.1 ALGO" }, { "pc": [ 969, 1499 ], "errorMessage": "MBR must be >= 0.2 ALGO" }, { "pc": [ 268 ], "errorMessage": "Not creator" }, { "pc": [ 572 ], "errorMessage": "Not experiment owner" }, { "pc": [ 127 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 577, 582, 1082, 1087 ], "errorMessage": "TrustVariation program not set" }, { "pc": [ 1561 ], "errorMessage": "Variation not found" }, { "pc": [ 274, 322, 593, 1098 ], "errorMessage": "Wrong MBR receiver" }, { "pc": [ 952, 1482 ], "errorMessage": "Wrong asset" }, { "pc": [ 623, 945, 1128, 1475 ], "errorMessage": "Wrong escrow receiver" }, { "pc": [ 746, 771, 911, 1287, 1312, 1441 ], "errorMessage": "application exists" }, { "pc": [ 377, 1138 ], "errorMessage": "check self.experiment_count exists" }, { "pc": [ 672, 1213 ], "errorMessage": "check self.registry_app exists" }, { "pc": [ 659, 1200 ], "errorMessage": "check self.tv_approval exists" }, { "pc": [ 662, 1203 ], "errorMessage": "check self.tv_clear exists" }, { "pc": [ 224, 241, 365, 455, 985, 999 ], "errorMessage": "invalid array length header" }, { "pc": [ 232, 249, 373, 462, 992, 1006 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 446, 1510, 1535, 1543 ], "errorMessage": "invalid number of bytes for arc4.uint32" }, { "pc": [ 211, 297, 472, 482, 492, 502, 513, 523, 1014, 1022, 1030, 1038, 1047, 1057 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 385, 649, 1149 ], "errorMessage": "overflow" }, { "pc": [ 262, 307, 537, 1071 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCA0IDEwMDAwMCA0Mjk0OTY3Mjk2IDIwMDAwMAogICAgYnl0ZWNibG9jayAweDc0NzY1ZjYxNzA3MDcyNmY3NjYxNmMgMHg3NDc2NWY2MzZjNjU2MTcyICJleHBlcmltZW50X2NvdW50IiAweDE1MWY3Yzc1ICJyZWdpc3RyeV9hcHAiIDB4MDAzNiAweDY1NWYgMHg3NjVmIDB4MDAwMDAwMDAwMDAwMDAwMCAweGI4ZGI4NjA1IDB4NWM5YTgzNmIgMHgwMDE2IDB4MDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMgogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHAgPSBHbG9iYWxTdGF0ZShVSW50NjQoMCkpCiAgICBieXRlYyA0IC8vICJyZWdpc3RyeV9hcHAiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMwogICAgLy8gc2VsZi5leHBlcmltZW50X2NvdW50ID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWNfMiAvLyAiZXhwZXJpbWVudF9jb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzAKICAgIC8vIGNsYXNzIFRydXN0RXhwZXJpbWVudHMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMwogICAgcHVzaGJ5dGVzcyAweDI5OWMzNTIxIDB4ZjgzNGM3NWMgMHgzMDI3N2NiNSAweDc2NjMyZTI5IDB4ZmJmYmQxZWQgMHhiZTYxN2JjYSAweDFhZjM3NmFkIC8vIG1ldGhvZCAic2V0X3RydXN0X3ZhcmlhdGlvbl9wcm9ncmFtKGJ5dGVbXSxieXRlW10scGF5KXZvaWQiLCBtZXRob2QgIm9wdF9pbl90b19hc3NldCh1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgImNyZWF0ZV9leHBlcmltZW50KHN0cmluZyl1aW50MzIiLCBtZXRob2QgImNyZWF0ZV92YXJpYXRpb24odWludDMyLHN0cmluZyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXksdHhuKXVpbnQ2NCIsIG1ldGhvZCAiY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb24oc3RyaW5nLHN0cmluZyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXksdHhuKSh1aW50MzIsdWludDY0KSIsIG1ldGhvZCAiZ2V0X2V4cGVyaW1lbnQodWludDMyKSh1aW50MzIsYWRkcmVzcyxzdHJpbmcsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImdldF92YXJpYXRpb24odWludDMyLHVpbnQzMikodWludDMyLHVpbnQ2NCxzdHJpbmcsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHNldF90cnVzdF92YXJpYXRpb25fcHJvZ3JhbSBvcHRfaW5fdG9fYXNzZXQgY3JlYXRlX2V4cGVyaW1lbnQgY3JlYXRlX3ZhcmlhdGlvbiBjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbiBnZXRfZXhwZXJpbWVudCBnZXRfdmFyaWF0aW9uCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzAKICAgIC8vIGNsYXNzIFRydXN0RXhwZXJpbWVudHMoQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweDI0MGQyZjY3IC8vIG1ldGhvZCAiY3JlYXRlKHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMudHJ1c3RfZXhwZXJpbWVudHMuY29udHJhY3QuVHJ1c3RFeHBlcmltZW50cy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSA9IHJlZ2lzdHJ5X2FwcC5hc191aW50NjQoKQogICAgYnRvaQogICAgYnl0ZWMgNCAvLyAicmVnaXN0cnlfYXBwIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnRydXN0X2V4cGVyaW1lbnRzLmNvbnRyYWN0LlRydXN0RXhwZXJpbWVudHMuc2V0X3RydXN0X3ZhcmlhdGlvbl9wcm9ncmFtW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3RydXN0X3ZhcmlhdGlvbl9wcm9ncmFtOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NTMKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsICJOb3QgY3JlYXRvciIKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBOb3QgY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIldyb25nIE1CUiByZWNlaXZlciIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBNQlIgcmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi50dl9hcHByb3ZhbC52YWx1ZSA9IGFwcHJvdmFsCiAgICBieXRlY18wIC8vIDB4NzQ3NjVmNjE3MDcwNzI2Zjc2NjE2YwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18wIC8vIDB4NzQ3NjVmNjE3MDcwNzI2Zjc2NjE2YwogICAgdW5jb3ZlciAyCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NTYKICAgIC8vIHNlbGYudHZfY2xlYXIudmFsdWUgPSBjbGVhcgogICAgYnl0ZWNfMSAvLyAweDc0NzY1ZjYzNmM2NTYxNzIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMSAvLyAweDc0NzY1ZjYzNmM2NTYxNzIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnRydXN0X2V4cGVyaW1lbnRzLmNvbnRyYWN0LlRydXN0RXhwZXJpbWVudHMub3B0X2luX3RvX2Fzc2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0X2luX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBhc3NlcnQgYXNzZXRfaWQuYXNfdWludDY0KCkgPiBVSW50NjQoMCksICJBc3NldCBJRCBtdXN0IGJlID4gMCIKICAgIHN3YXAKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBhc3NlcnQgLy8gQXNzZXQgSUQgbXVzdCBiZSA+IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo3MAogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJXcm9uZyBNQlIgcmVjZWl2ZXIiCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIE1CUiByZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID49IFVJbnQ2NCgxMDBfMDAwKSwgIk1CUiBtdXN0IGJlID49IDAuMSBBTEdPIgogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjIDQgLy8gMTAwMDAwCiAgICA+PQogICAgYXNzZXJ0IC8vIE1CUiBtdXN0IGJlID49IDAuMSBBTEdPCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NzQKICAgIC8vIGlmIG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKGFzc2V0KToKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBzd2FwCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYm56IG9wdF9pbl90b19hc3NldF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo3NS04MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo3OAogICAgLy8gYXNzZXRfYW1vdW50PVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo3NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NzkKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6NzUtODAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PVVJbnQ2NCgwKSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpvcHRfaW5fdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1c3RfZXhwZXJpbWVudHMuY29udHJhY3QuVHJ1c3RFeHBlcmltZW50cy5jcmVhdGVfZXhwZXJpbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZV9leHBlcmltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo4NAogICAgLy8gZXhwX2lkID0gYXJjNC5VSW50MzIoc2VsZi5leHBlcmltZW50X2NvdW50LnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImV4cGVyaW1lbnRfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZXhwZXJpbWVudF9jb3VudCBleGlzdHMKICAgIGR1cAogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6ODUKICAgIC8vIHNlbGYuZXhwZXJpbWVudF9jb3VudC52YWx1ZSArPSBVSW50NjQoMSkKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlY18yIC8vICJleHBlcmltZW50X2NvdW50IgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo4OAogICAgLy8gb3duZXI9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo4Ni05MgogICAgLy8gc2VsZi5leHBlcmltZW50c1tleHBfaWRdID0gRXhwZXJpbWVudEdyb3VwKAogICAgLy8gICAgIGV4cF9pZD1leHBfaWQsCiAgICAvLyAgICAgb3duZXI9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIG5hbWU9bmFtZSwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICB2YXJpYXRpb25fY291bnQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyApCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjIDUgLy8gMHgwMDM2CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjkxCiAgICAvLyB2YXJpYXRpb25fY291bnQ9YXJjNC5VSW50NjQoMCksCiAgICBieXRlYyA4IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5Ojg2LTkyCiAgICAvLyBzZWxmLmV4cGVyaW1lbnRzW2V4cF9pZF0gPSBFeHBlcmltZW50R3JvdXAoCiAgICAvLyAgICAgZXhwX2lkPWV4cF9pZCwKICAgIC8vICAgICBvd25lcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgbmFtZT1uYW1lLAogICAgLy8gICAgIGNyZWF0ZWRfYXQ9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgLy8gICAgIHZhcmlhdGlvbl9jb3VudD1hcmM0LlVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo4NgogICAgLy8gc2VsZi5leHBlcmltZW50c1tleHBfaWRdID0gRXhwZXJpbWVudEdyb3VwKAogICAgYnl0ZWMgNiAvLyAweDY1NWYKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo4Ni05MgogICAgLy8gc2VsZi5leHBlcmltZW50c1tleHBfaWRdID0gRXhwZXJpbWVudEdyb3VwKAogICAgLy8gICAgIGV4cF9pZD1leHBfaWQsCiAgICAvLyAgICAgb3duZXI9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIG5hbWU9bmFtZSwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICB2YXJpYXRpb25fY291bnQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyApCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudHJ1c3RfZXhwZXJpbWVudHMuY29udHJhY3QuVHJ1c3RFeHBlcmltZW50cy5jcmVhdGVfdmFyaWF0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX3ZhcmlhdGlvbjoKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6OTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IGV4cF9pZCBpbiBzZWxmLmV4cGVyaW1lbnRzLCAiRXhwZXJpbWVudCBub3QgZm91bmQiCiAgICBieXRlYyA2IC8vIDB4NjU1ZgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBFeHBlcmltZW50IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjExMAogICAgLy8gZXhwZXJpbWVudCA9IHNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXS5jb3B5KCkKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTEwLTExMQogICAgLy8gZXhwZXJpbWVudCA9IHNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXS5jb3B5KCkKICAgIC8vIGFzc2VydCBleHBlcmltZW50Lm93bmVyID09IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgIk5vdCBleHBlcmltZW50IG93bmVyIgogICAgaW50Y18zIC8vIDQKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMTEKICAgIC8vIGFzc2VydCBleHBlcmltZW50Lm93bmVyID09IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwgIk5vdCBleHBlcmltZW50IG93bmVyIgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBOb3QgZXhwZXJpbWVudCBvd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjExMgogICAgLy8gYXNzZXJ0IHNlbGYudHZfYXBwcm92YWwsICJUcnVzdFZhcmlhdGlvbiBwcm9ncmFtIG5vdCBzZXQiCiAgICBieXRlY18wIC8vIDB4NzQ3NjVmNjE3MDcwNzI2Zjc2NjE2YwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gVHJ1c3RWYXJpYXRpb24gcHJvZ3JhbSBub3Qgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTEzCiAgICAvLyBhc3NlcnQgc2VsZi50dl9jbGVhciwgIlRydXN0VmFyaWF0aW9uIHByb2dyYW0gbm90IHNldCIKICAgIGJ5dGVjXzEgLy8gMHg3NDc2NWY2MzZjNjU2MTcyCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBUcnVzdFZhcmlhdGlvbiBwcm9ncmFtIG5vdCBzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2V0X2lkX3ZhbHVlID0gYXNzZXRfaWQuYXNfdWludDY0KCkKICAgIHN3YXAKICAgIGJ0b2kKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTE3LTExOQogICAgLy8gIyBNQlIgbGVnIGZ1bmRzIHRoZSBuZXcgdmFyaWF0aW9uIGFwcCdzIGFjY291bnQ6IDAuMSBBTEdPIGJhc2UgKyAwLjEgQUxHTwogICAgLy8gIyBwZXIgYXNzZXQgb3B0LWluLiBBbHdheXMgcGFpZCBpbiBBTEdPIHJlZ2FyZGxlc3Mgb2YgcGF5b3V0IGFzc2V0LgogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJXcm9uZyBNQlIgcmVjZWl2ZXIiCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgTUJSIHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTIwCiAgICAvLyBpZiBhc3NldF9pZF92YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBibnogY3JlYXRlX3ZhcmlhdGlvbl9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjEyMQogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA+PSBVSW50NjQoX1ZBUl9BUFBfTUJSX0FMR08pLCAiTUJSIG11c3QgYmUgPj0gMC4xIEFMR08iCiAgICBkaWcgNQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjIDQgLy8gMTAwMDAwCiAgICA+PQogICAgYXNzZXJ0IC8vIE1CUiBtdXN0IGJlID49IDAuMSBBTEdPCgpjcmVhdGVfdmFyaWF0aW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMjgKICAgIC8vIGlmIGFzc2V0X2lkX3ZhbHVlID09IFVJbnQ2NCgwKToKICAgIGR1cAogICAgYm56IGNyZWF0ZV92YXJpYXRpb25fZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMjkKICAgIC8vIGFzc2VydCBlc2Nyb3dfZnVuZGluZy50eXBlID09IFRyYW5zYWN0aW9uVHlwZS5QYXltZW50LCAiRXNjcm93IG11c3QgYmUgUGF5bWVudCBmb3IgQUxHTyIKICAgIGRpZyA0CiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIEVzY3JvdyBtdXN0IGJlIFBheW1lbnQgZm9yIEFMR08KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMzAKICAgIC8vIGFzc2VydCBlc2Nyb3dfZnVuZGluZy5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAiV3JvbmcgZXNjcm93IHJlY2VpdmVyIgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgZXNjcm93IHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTMxCiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcuYW1vdW50ID4gVUludDY0KDApLCAiRXNjcm93IG11c3QgYmUgPiAwIgogICAgZ3R4bnMgQW1vdW50CiAgICBkdXAKICAgIGJ1cnkgMTcKICAgIGFzc2VydCAvLyBFc2Nyb3cgbXVzdCBiZSA+IDAKCmNyZWF0ZV92YXJpYXRpb25fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE0MAogICAgLy8gdmFyX2lkID0gYXJjNC5VSW50MzIoZXhwZXJpbWVudC52YXJpYXRpb25fY291bnQuYXNfdWludDY0KCkpCiAgICBkaWcgMwogICAgcHVzaGludCA0NiAvLyA0NgogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkdXAKICAgIGJ1cnkgMTYKICAgIGl0b2IKICAgIGR1cAogICAgYnVyeSAyMAogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICBkdXAKICAgIGJ1cnkgMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNDItMTY0CiAgICAvLyAjIERlcGxveSBUcnVzdFZhcmlhdGlvbiBhbmQgY2FsbCBjcmVhdGUoKSBpbiBvbmUgdHJhbnNhY3Rpb24KICAgIC8vICMgU2VsZWN0b3I6IGNyZWF0ZSh1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiAgICAvLyBkZXBsb3llZCA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09c2VsZi50dl9hcHByb3ZhbC52YWx1ZSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPXNlbGYudHZfY2xlYXIudmFsdWUsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PV9UUlVTVF9WQVJfR0xPQkFMX1VJTlQsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1fVFJVU1RfVkFSX0dMT0JBTF9CWVRFUywKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIEJ5dGVzKGIiXHhiOFx4ZGJceDg2XHgwNSIpLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCkuYnl0ZXMsCiAgICAvLyAgICAgICAgIGV4cF9pZC5ieXRlcywKICAgIC8vICAgICAgICAgdmFyX2lkLmJ5dGVzLAogICAgLy8gICAgICAgICBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikuYnl0ZXMsCiAgICAvLyAgICAgICAgIGUxLmJ5dGVzLAogICAgLy8gICAgICAgICBlMi5ieXRlcywKICAgIC8vICAgICAgICAgbXVsdGlwbGllci5ieXRlcywKICAgIC8vICAgICAgICAgdW5pdC5ieXRlcywKICAgIC8vICAgICAgICAgYXNzZXRfaWQuYnl0ZXMsCiAgICAvLyAgICAgICAgIGFyYzQuVUludDY0KHNlbGYucmVnaXN0cnlfYXBwLnZhbHVlKS5ieXRlcywKICAgIC8vICAgICAgICAgbWF4X3BhcnRpY2lwYW50cy5ieXRlcywKICAgIC8vICAgICApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gYXBwcm92YWxfcHJvZ3JhbT1zZWxmLnR2X2FwcHJvdmFsLnZhbHVlLAogICAgYnl0ZWNfMCAvLyAweDc0NzY1ZjYxNzA3MDcyNmY3NjYxNmMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR2X2FwcHJvdmFsIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1zZWxmLnR2X2NsZWFyLnZhbHVlLAogICAgYnl0ZWNfMSAvLyAweDc0NzY1ZjYzNmM2NTYxNzIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR2X2NsZWFyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gYXJjNC5VSW50NjQoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLmJ5dGVzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTU0CiAgICAvLyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikuYnl0ZXMsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTYwCiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSkuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicmVnaXN0cnlfYXBwIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5X2FwcCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNTAKICAgIC8vIEJ5dGVzKGIiXHhiOFx4ZGJceDg2XHgwNSIpLAogICAgYnl0ZWMgOSAvLyAweGI4ZGI4NjA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDE4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyAxMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgOAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNDgKICAgIC8vIGdsb2JhbF9udW1fYnl0ZXM9X1RSVVNUX1ZBUl9HTE9CQUxfQllURVMsCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNDcKICAgIC8vIGdsb2JhbF9udW1fdWludD1fVFJVU1RfVkFSX0dMT0JBTF9VSU5ULAogICAgcHVzaGludCAxNiAvLyAxNgogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNDItMTQ0CiAgICAvLyAjIERlcGxveSBUcnVzdFZhcmlhdGlvbiBhbmQgY2FsbCBjcmVhdGUoKSBpbiBvbmUgdHJhbnNhY3Rpb24KICAgIC8vICMgU2VsZWN0b3I6IGNyZWF0ZSh1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiAgICAvLyBkZXBsb3llZCA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNjMKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTQyLTE2NAogICAgLy8gIyBEZXBsb3kgVHJ1c3RWYXJpYXRpb24gYW5kIGNhbGwgY3JlYXRlKCkgaW4gb25lIHRyYW5zYWN0aW9uCiAgICAvLyAjIFNlbGVjdG9yOiBjcmVhdGUodWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAogICAgLy8gZGVwbG95ZWQgPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPXNlbGYudHZfYXBwcm92YWwudmFsdWUsCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1zZWxmLnR2X2NsZWFyLnZhbHVlLAogICAgLy8gICAgIGdsb2JhbF9udW1fdWludD1fVFJVU1RfVkFSX0dMT0JBTF9VSU5ULAogICAgLy8gICAgIGdsb2JhbF9udW1fYnl0ZXM9X1RSVVNUX1ZBUl9HTE9CQUxfQllURVMsCiAgICAvLyAgICAgYXBwX2FyZ3M9KAogICAgLy8gICAgICAgICBCeXRlcyhiIlx4YjhceGRiXHg4Nlx4MDUiKSwKICAgIC8vICAgICAgICAgYXJjNC5VSW50NjQoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLmJ5dGVzLAogICAgLy8gICAgICAgICBleHBfaWQuYnl0ZXMsCiAgICAvLyAgICAgICAgIHZhcl9pZC5ieXRlcywKICAgIC8vICAgICAgICAgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLmJ5dGVzLAogICAgLy8gICAgICAgICBlMS5ieXRlcywKICAgIC8vICAgICAgICAgZTIuYnl0ZXMsCiAgICAvLyAgICAgICAgIG11bHRpcGxpZXIuYnl0ZXMsCiAgICAvLyAgICAgICAgIHVuaXQuYnl0ZXMsCiAgICAvLyAgICAgICAgIGFzc2V0X2lkLmJ5dGVzLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSkuYnl0ZXMsCiAgICAvLyAgICAgICAgIG1heF9wYXJ0aWNpcGFudHMuYnl0ZXMsCiAgICAvLyAgICAgKSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICBkdXAKICAgIGJ1cnkgMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNjctMTcyCiAgICAvLyAjIEZ1bmQgdGhlIG5ldyB2YXJpYXRpb24gYXBwJ3MgYWNjb3VudCB3aXRoIE1CUiAoY292ZXJzIGJhc2UgKyBvcHQtaW4pLgogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPW5ld19hcHAuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ9bWJyX3BheW1lbnQuYW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE3MAogICAgLy8gYW1vdW50PW1icl9wYXltZW50LmFtb3VudCwKICAgIGRpZyA2CiAgICBndHhucyBBbW91bnQKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTY3LTE2OAogICAgLy8gIyBGdW5kIHRoZSBuZXcgdmFyaWF0aW9uIGFwcCdzIGFjY291bnQgd2l0aCBNQlIgKGNvdmVycyBiYXNlICsgb3B0LWluKS4KICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNzEKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTY3LTE3MgogICAgLy8gIyBGdW5kIHRoZSBuZXcgdmFyaWF0aW9uIGFwcCdzIGFjY291bnQgd2l0aCBNQlIgKGNvdmVycyBiYXNlICsgb3B0LWluKS4KICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PW1icl9wYXltZW50LmFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTc0LTE3NQogICAgLy8gIyBGb3J3YXJkIGVzY3JvdyB0byB0aGUgbmV3IFRydXN0VmFyaWF0aW9uIGFwcCBhY2NvdW50LgogICAgLy8gaWYgYXNzZXRfaWRfdmFsdWUgPT0gVUludDY0KDApOgogICAgZHVwCiAgICBibnogY3JlYXRlX3ZhcmlhdGlvbl9lbHNlX2JvZHlAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxNzYtMTgwCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1lc2Nyb3dfYW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgZGlnIDE2CiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBkaWcgMTYKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTc2CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTc5CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE3Ni0xODAKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PWVzY3Jvd19hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKY3JlYXRlX3ZhcmlhdGlvbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE4OS0xOTgKICAgIC8vICMgUmVjb3JkIHRoZSBkZXBvc2l0IGluIFRydXN0VmFyaWF0aW9uCiAgICAvLyAjIFNlbGVjdG9yOiByZWNvcmRfZXNjcm93KHVpbnQ2NCl2b2lkCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9bmV3X2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIEJ5dGVzKGIiXHg1Y1x4OWFceDgzXHg2YiIpLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChlc2Nyb3dfYW1vdW50KS5ieXRlcywKICAgIC8vICAgICApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE5NQogICAgLy8gYXJjNC5VSW50NjQoZXNjcm93X2Ftb3VudCkuYnl0ZXMsCiAgICBkaWcgMTUKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxOTQKICAgIC8vIEJ5dGVzKGIiXHg1Y1x4OWFceDgzXHg2YiIpLAogICAgYnl0ZWMgMTAgLy8gMHg1YzlhODM2YgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTYKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTg5LTE5MQogICAgLy8gIyBSZWNvcmQgdGhlIGRlcG9zaXQgaW4gVHJ1c3RWYXJpYXRpb24KICAgIC8vICMgU2VsZWN0b3I6IHJlY29yZF9lc2Nyb3codWludDY0KXZvaWQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxOTcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTg5LTE5OAogICAgLy8gIyBSZWNvcmQgdGhlIGRlcG9zaXQgaW4gVHJ1c3RWYXJpYXRpb24KICAgIC8vICMgU2VsZWN0b3I6IHJlY29yZF9lc2Nyb3codWludDY0KXZvaWQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1uZXdfYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPSgKICAgIC8vICAgICAgICAgQnl0ZXMoYiJceDVjXHg5YVx4ODNceDZiIiksCiAgICAvLyAgICAgICAgIGFyYzQuVUludDY0KGVzY3Jvd19hbW91bnQpLmJ5dGVzLAogICAgLy8gICAgICksCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gZXhwZXJpbWVudC5leHBfaWQuYXNfdWludDY0KCkgKiBVSW50NjQoNDI5NDk2NzI5NikgKyB2YXJfaWQuYXNfdWludDY0KCkKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gNAogICAgYm94X2V4dHJhY3QKICAgIGR1cAogICAgYnRvaQogICAgaW50YyA1IC8vIDQyOTQ5NjcyOTYKICAgICoKICAgIGRpZyAyMgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE0MAogICAgLy8gdmFyX2lkID0gYXJjNC5VSW50MzIoZXhwZXJpbWVudC52YXJpYXRpb25fY291bnQuYXNfdWludDY0KCkpCiAgICBpbnRjXzMgLy8gNAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjIwMgogICAgLy8gZXhwZXJpbWVudC5leHBfaWQuYXNfdWludDY0KCkgKiBVSW50NjQoNDI5NDk2NzI5NikgKyB2YXJfaWQuYXNfdWludDY0KCkKICAgIGV4dHJhY3RfdWludDMyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjAwLTIwMwogICAgLy8gIyBQYWNrZWQgY29tcG9zaXRlIGtleTogaGlnaCAzMiBiaXRzID0gZXhwX2lkLCBsb3cgMzIgYml0cyA9IHZhcl9pZAogICAgLy8gdmFyaWF0aW9uX2tleSA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGV4cGVyaW1lbnQuZXhwX2lkLmFzX3VpbnQ2NCgpICogVUludDY0KDQyOTQ5NjcyOTYpICsgdmFyX2lkLmFzX3VpbnQ2NCgpCiAgICAvLyApCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjA2CiAgICAvLyBhcHBfaWQ9YXJjNC5VSW50NjQobmV3X2FwcC5pZCksCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyMDgKICAgIC8vIGNyZWF0ZWRfYXQ9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjIwNC0yMDkKICAgIC8vIHNlbGYudmFyaWF0aW9uc1t2YXJpYXRpb25fa2V5XSA9IFZhcmlhdGlvbkluZm8oCiAgICAvLyAgICAgdmFyX2lkPXZhcl9pZCwKICAgIC8vICAgICBhcHBfaWQ9YXJjNC5VSW50NjQobmV3X2FwcC5pZCksCiAgICAvLyAgICAgbGFiZWw9bGFiZWwsCiAgICAvLyAgICAgY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyApCiAgICBkaWcgMjIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGJ5dGVjIDExIC8vIDB4MDAxNgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxNwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjA0CiAgICAvLyBzZWxmLnZhcmlhdGlvbnNbdmFyaWF0aW9uX2tleV0gPSBWYXJpYXRpb25JbmZvKAogICAgYnl0ZWMgNyAvLyAweDc2NWYKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjA0LTIwOQogICAgLy8gc2VsZi52YXJpYXRpb25zW3ZhcmlhdGlvbl9rZXldID0gVmFyaWF0aW9uSW5mbygKICAgIC8vICAgICB2YXJfaWQ9dmFyX2lkLAogICAgLy8gICAgIGFwcF9pZD1hcmM0LlVJbnQ2NChuZXdfYXBwLmlkKSwKICAgIC8vICAgICBsYWJlbD1sYWJlbCwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjE1CiAgICAvLyBuYW1lPWV4cGVyaW1lbnQubmFtZSwKICAgIGRpZyA1CiAgICBkdXAKICAgIHB1c2hpbnQgMzYgLy8gMzYKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjE2CiAgICAvLyBjcmVhdGVkX2F0PWV4cGVyaW1lbnQuY3JlYXRlZF9hdCwKICAgIGRpZyAzCiAgICBwdXNoaW50IDM4IC8vIDM4CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyMTcKICAgIC8vIHZhcmlhdGlvbl9jb3VudD1hcmM0LlVJbnQ2NChleHBlcmltZW50LnZhcmlhdGlvbl9jb3VudC5hc191aW50NjQoKSArIFVJbnQ2NCgxKSksCiAgICBkaWcgMTkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjExLTIxOAogICAgLy8gIyBJbmNyZW1lbnQgZXhwZXJpbWVudCB2YXJpYXRpb24gY291bnQKICAgIC8vIHNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXSA9IEV4cGVyaW1lbnRHcm91cCgKICAgIC8vICAgICBleHBfaWQ9ZXhwZXJpbWVudC5leHBfaWQsCiAgICAvLyAgICAgb3duZXI9ZXhwZXJpbWVudC5vd25lci5jb3B5KCksCiAgICAvLyAgICAgbmFtZT1leHBlcmltZW50Lm5hbWUsCiAgICAvLyAgICAgY3JlYXRlZF9hdD1leHBlcmltZW50LmNyZWF0ZWRfYXQsCiAgICAvLyAgICAgdmFyaWF0aW9uX2NvdW50PWFyYzQuVUludDY0KGV4cGVyaW1lbnQudmFyaWF0aW9uX2NvdW50LmFzX3VpbnQ2NCgpICsgVUludDY0KDEpKSwKICAgIC8vICkKICAgIHVuY292ZXIgNAogICAgZGlnIDcKICAgIGNvbmNhdAogICAgYnl0ZWMgNSAvLyAweDAwMzYKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVfdmFyaWF0aW9uX2Vsc2VfYm9keUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxODItMTg3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChhc3NldF9pZF92YWx1ZSksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1lc2Nyb3dfYW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgZGlnIDE2CiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBkaWcgMTYKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTg2CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjE4Mi0xODcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KGFzc2V0X2lkX3ZhbHVlKSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWVzY3Jvd19hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgYiBjcmVhdGVfdmFyaWF0aW9uX2FmdGVyX2lmX2Vsc2VAMTQKCmNyZWF0ZV92YXJpYXRpb25fZWxzZV9ib2R5QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcudHlwZSA9PSBUcmFuc2FjdGlvblR5cGUuQXNzZXRUcmFuc2ZlciwgIkVzY3JvdyBtdXN0IGJlIEFzc2V0VHJhbnNmZXIgZm9yIEFTQSIKICAgIGRpZyA0CiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gRXNjcm93IG11c3QgYmUgQXNzZXRUcmFuc2ZlciBmb3IgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTM1CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIldyb25nIGVzY3JvdyByZWNlaXZlciIKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgZXNjcm93IHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTM2CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcueGZlcl9hc3NldC5pZCA9PSBhc3NldF9pZF92YWx1ZSwgIldyb25nIGFzc2V0IgogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcuYXNzZXRfYW1vdW50ID4gVUludDY0KDApLCAiRXNjcm93IG11c3QgYmUgPiAwIgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYnVyeSAxNwogICAgYXNzZXJ0IC8vIEVzY3JvdyBtdXN0IGJlID4gMAogICAgYiBjcmVhdGVfdmFyaWF0aW9uX2FmdGVyX2lmX2Vsc2VANwoKY3JlYXRlX3ZhcmlhdGlvbl9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToxMjMKICAgIC8vIGFzc2VydCBtYnJfcGF5bWVudC5hbW91bnQgPj0gVUludDY0KF9WQVJfQVBQX01CUl9BU0EpLCAiTUJSIG11c3QgYmUgPj0gMC4yIEFMR08iCiAgICBkaWcgNQogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjIDYgLy8gMjAwMDAwCiAgICA+PQogICAgYXNzZXJ0IC8vIE1CUiBtdXN0IGJlID49IDAuMiBBTEdPCiAgICBiIGNyZWF0ZV92YXJpYXRpb25fYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnRydXN0X2V4cGVyaW1lbnRzLmNvbnRyYWN0LlRydXN0RXhwZXJpbWVudHMuY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbjoKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDIKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBkdXBuIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA4CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjM2CiAgICAvLyBhc3NlcnQgc2VsZi50dl9hcHByb3ZhbCwgIlRydXN0VmFyaWF0aW9uIHByb2dyYW0gbm90IHNldCIKICAgIGJ5dGVjXzAgLy8gMHg3NDc2NWY2MTcwNzA3MjZmNzY2MTZjCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBUcnVzdFZhcmlhdGlvbiBwcm9ncmFtIG5vdCBzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyMzcKICAgIC8vIGFzc2VydCBzZWxmLnR2X2NsZWFyLCAiVHJ1c3RWYXJpYXRpb24gcHJvZ3JhbSBub3Qgc2V0IgogICAgYnl0ZWNfMSAvLyAweDc0NzY1ZjYzNmM2NTYxNzIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIFRydXN0VmFyaWF0aW9uIHByb2dyYW0gbm90IHNldAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjIzOQogICAgLy8gYXNzZXRfaWRfdmFsdWUgPSBhc3NldF9pZC5hc191aW50NjQoKQogICAgc3dhcAogICAgYnRvaQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNDEtMjQyCiAgICAvLyAjIE1CUiBsZWcgZnVuZHMgdGhlIG5ldyB2YXJpYXRpb24gYXBwJ3MgYWNjb3VudDsgYWx3YXlzIEFMR08uCiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIldyb25nIE1CUiByZWNlaXZlciIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBNQlIgcmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNDMKICAgIC8vIGlmIGFzc2V0X2lkX3ZhbHVlID09IFVJbnQ2NCgwKToKICAgIGJueiBjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI0NAogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA+PSBVSW50NjQoX1ZBUl9BUFBfTUJSX0FMR08pLCAiTUJSIG11c3QgYmUgPj0gMC4xIEFMR08iCiAgICBkaWcgMgogICAgZ3R4bnMgQW1vdW50CiAgICBpbnRjIDQgLy8gMTAwMDAwCiAgICA+PQogICAgYXNzZXJ0IC8vIE1CUiBtdXN0IGJlID49IDAuMSBBTEdPCgpjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjUwCiAgICAvLyBpZiBhc3NldF9pZF92YWx1ZSA9PSBVSW50NjQoMCk6CiAgICBkdXAKICAgIGJueiBjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gYXNzZXJ0IGVzY3Jvd19mdW5kaW5nLnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQsICJFc2Nyb3cgbXVzdCBiZSBQYXltZW50IGZvciBBTEdPIgogICAgZGlnIDEKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gRXNjcm93IG11c3QgYmUgUGF5bWVudCBmb3IgQUxHTwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI1MgogICAgLy8gYXNzZXJ0IGVzY3Jvd19mdW5kaW5nLnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJXcm9uZyBlc2Nyb3cgcmVjZWl2ZXIiCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBlc2Nyb3cgcmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNTMKICAgIC8vIGFzc2VydCBlc2Nyb3dfZnVuZGluZy5hbW91bnQgPiBVSW50NjQoMCksICJFc2Nyb3cgbXVzdCBiZSA+IDAiCiAgICBndHhucyBBbW91bnQKICAgIGR1cAogICAgYnVyeSAxMwogICAgYXNzZXJ0IC8vIEVzY3JvdyBtdXN0IGJlID4gMAoKY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb25fYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI2Mi0yNjMKICAgIC8vICMgQ3JlYXRlIHRoZSBleHBlcmltZW50IGdyb3VwCiAgICAvLyBleHBfaWQgPSBhcmM0LlVJbnQzMihzZWxmLmV4cGVyaW1lbnRfY291bnQudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZXhwZXJpbWVudF9jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5leHBlcmltZW50X2NvdW50IGV4aXN0cwogICAgZHVwCiAgICBpdG9iCiAgICBkdXAKICAgIGJ1cnkgMTgKICAgIGR1cAogICAgYml0bGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjY0CiAgICAvLyBzZWxmLmV4cGVyaW1lbnRfY291bnQudmFsdWUgKz0gVUludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnl0ZWNfMiAvLyAiZXhwZXJpbWVudF9jb3VudCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjY3CiAgICAvLyBvd25lcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjY5CiAgICAvLyBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNjUtMjcxCiAgICAvLyBzZWxmLmV4cGVyaW1lbnRzW2V4cF9pZF0gPSBFeHBlcmltZW50R3JvdXAoCiAgICAvLyAgICAgZXhwX2lkPWV4cF9pZCwKICAgIC8vICAgICBvd25lcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgbmFtZT1uYW1lLAogICAgLy8gICAgIGNyZWF0ZWRfYXQ9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgLy8gICAgIHZhcmlhdGlvbl9jb3VudD1hcmM0LlVJbnQ2NCgwKSwKICAgIC8vICkKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgYnl0ZWMgNSAvLyAweDAwMzYKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjcwCiAgICAvLyB2YXJpYXRpb25fY291bnQ9YXJjNC5VSW50NjQoMCksCiAgICBieXRlYyA4IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI2NS0yNzEKICAgIC8vIHNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXSA9IEV4cGVyaW1lbnRHcm91cCgKICAgIC8vICAgICBleHBfaWQ9ZXhwX2lkLAogICAgLy8gICAgIG93bmVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICBuYW1lPW5hbWUsCiAgICAvLyAgICAgY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgdmFyaWF0aW9uX2NvdW50PWFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgY29uY2F0CiAgICBkaWcgMTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI2NQogICAgLy8gc2VsZi5leHBlcmltZW50c1tleHBfaWRdID0gRXhwZXJpbWVudEdyb3VwKAogICAgYnl0ZWMgNiAvLyAweDY1NWYKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgYnVyeSAxOAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI2NS0yNzEKICAgIC8vIHNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXSA9IEV4cGVyaW1lbnRHcm91cCgKICAgIC8vICAgICBleHBfaWQ9ZXhwX2lkLAogICAgLy8gICAgIG93bmVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICBuYW1lPW5hbWUsCiAgICAvLyAgICAgY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgdmFyaWF0aW9uX2NvdW50PWFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNzYtMjk4CiAgICAvLyAjIERlcGxveSBUcnVzdFZhcmlhdGlvbiBhbmQgY2FsbCBjcmVhdGUoKSBpbiBvbmUgdHJhbnNhY3Rpb24KICAgIC8vICMgU2VsZWN0b3I6IGNyZWF0ZSh1aW50NjQsdWludDMyLHVpbnQzMixhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiAgICAvLyBkZXBsb3llZCA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09c2VsZi50dl9hcHByb3ZhbC52YWx1ZSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPXNlbGYudHZfY2xlYXIudmFsdWUsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PV9UUlVTVF9WQVJfR0xPQkFMX1VJTlQsCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz1fVFJVU1RfVkFSX0dMT0JBTF9CWVRFUywKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIEJ5dGVzKGIiXHhiOFx4ZGJceDg2XHgwNSIpLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZC5pZCkuYnl0ZXMsCiAgICAvLyAgICAgICAgIGV4cF9pZC5ieXRlcywKICAgIC8vICAgICAgICAgdmFyX2lkLmJ5dGVzLAogICAgLy8gICAgICAgICBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikuYnl0ZXMsCiAgICAvLyAgICAgICAgIGUxLmJ5dGVzLAogICAgLy8gICAgICAgICBlMi5ieXRlcywKICAgIC8vICAgICAgICAgbXVsdGlwbGllci5ieXRlcywKICAgIC8vICAgICAgICAgdW5pdC5ieXRlcywKICAgIC8vICAgICAgICAgYXNzZXRfaWQuYnl0ZXMsCiAgICAvLyAgICAgICAgIGFyYzQuVUludDY0KHNlbGYucmVnaXN0cnlfYXBwLnZhbHVlKS5ieXRlcywKICAgIC8vICAgICAgICAgbWF4X3BhcnRpY2lwYW50cy5ieXRlcywKICAgIC8vICAgICApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gYXBwcm92YWxfcHJvZ3JhbT1zZWxmLnR2X2FwcHJvdmFsLnZhbHVlLAogICAgYnl0ZWNfMCAvLyAweDc0NzY1ZjYxNzA3MDcyNmY3NjYxNmMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR2X2FwcHJvdmFsIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1zZWxmLnR2X2NsZWFyLnZhbHVlLAogICAgYnl0ZWNfMSAvLyAweDc0NzY1ZjYzNmM2NTYxNzIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnR2X2NsZWFyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gYXJjNC5VSW50NjQoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQuaWQpLmJ5dGVzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6Mjg4CiAgICAvLyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikuYnl0ZXMsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6Mjk0CiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSkuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAicmVnaXN0cnlfYXBwIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5X2FwcCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyODQKICAgIC8vIEJ5dGVzKGIiXHhiOFx4ZGJceDg2XHgwNSIpLAogICAgYnl0ZWMgOSAvLyAweGI4ZGI4NjA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI3My0yNzQKICAgIC8vICMgQ3JlYXRlIHRoZSBmaXJzdCB2YXJpYXRpb24gKHZhcl9pZCA9IDApCiAgICAvLyB2YXJfaWQgPSBhcmM0LlVJbnQzMigwKQogICAgYnl0ZWMgMTIgLy8gMHgwMDAwMDAwMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgOQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyA4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjgyCiAgICAvLyBnbG9iYWxfbnVtX2J5dGVzPV9UUlVTVF9WQVJfR0xPQkFMX0JZVEVTLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjgxCiAgICAvLyBnbG9iYWxfbnVtX3VpbnQ9X1RSVVNUX1ZBUl9HTE9CQUxfVUlOVCwKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtVWludAogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6Mjc2LTI3OAogICAgLy8gIyBEZXBsb3kgVHJ1c3RWYXJpYXRpb24gYW5kIGNhbGwgY3JlYXRlKCkgaW4gb25lIHRyYW5zYWN0aW9uCiAgICAvLyAjIFNlbGVjdG9yOiBjcmVhdGUodWludDY0LHVpbnQzMix1aW50MzIsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZAogICAgLy8gZGVwbG95ZWQgPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6Mjk3CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI3Ni0yOTgKICAgIC8vICMgRGVwbG95IFRydXN0VmFyaWF0aW9uIGFuZCBjYWxsIGNyZWF0ZSgpIGluIG9uZSB0cmFuc2FjdGlvbgogICAgLy8gIyBTZWxlY3RvcjogY3JlYXRlKHVpbnQ2NCx1aW50MzIsdWludDMyLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKICAgIC8vIGRlcGxveWVkID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1zZWxmLnR2X2FwcHJvdmFsLnZhbHVlLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09c2VsZi50dl9jbGVhci52YWx1ZSwKICAgIC8vICAgICBnbG9iYWxfbnVtX3VpbnQ9X1RSVVNUX1ZBUl9HTE9CQUxfVUlOVCwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPV9UUlVTVF9WQVJfR0xPQkFMX0JZVEVTLAogICAgLy8gICAgIGFwcF9hcmdzPSgKICAgIC8vICAgICAgICAgQnl0ZXMoYiJceGI4XHhkYlx4ODZceDA1IiksCiAgICAvLyAgICAgICAgIGFyYzQuVUludDY0KEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLmlkKS5ieXRlcywKICAgIC8vICAgICAgICAgZXhwX2lkLmJ5dGVzLAogICAgLy8gICAgICAgICB2YXJfaWQuYnl0ZXMsCiAgICAvLyAgICAgICAgIGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKS5ieXRlcywKICAgIC8vICAgICAgICAgZTEuYnl0ZXMsCiAgICAvLyAgICAgICAgIGUyLmJ5dGVzLAogICAgLy8gICAgICAgICBtdWx0aXBsaWVyLmJ5dGVzLAogICAgLy8gICAgICAgICB1bml0LmJ5dGVzLAogICAgLy8gICAgICAgICBhc3NldF9pZC5ieXRlcywKICAgIC8vICAgICAgICAgYXJjNC5VSW50NjQoc2VsZi5yZWdpc3RyeV9hcHAudmFsdWUpLmJ5dGVzLAogICAgLy8gICAgICAgICBtYXhfcGFydGljaXBhbnRzLmJ5dGVzLAogICAgLy8gICAgICksCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgZHVwCiAgICBidXJ5IDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzAxLTMwNgogICAgLy8gIyBGdW5kIHRoZSBuZXcgdmFyaWF0aW9uIGFwcCdzIGFjY291bnQgd2l0aCBNQlIuCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1tYnJfcGF5bWVudC5hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzAzCiAgICAvLyByZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzA0CiAgICAvLyBhbW91bnQ9bWJyX3BheW1lbnQuYW1vdW50LAogICAgZGlnIDMKICAgIGd0eG5zIEFtb3VudAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMDEtMzAyCiAgICAvLyAjIEZ1bmQgdGhlIG5ldyB2YXJpYXRpb24gYXBwJ3MgYWNjb3VudCB3aXRoIE1CUi4KICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMDUKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzAxLTMwNgogICAgLy8gIyBGdW5kIHRoZSBuZXcgdmFyaWF0aW9uIGFwcCdzIGFjY291bnQgd2l0aCBNQlIuCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1tYnJfcGF5bWVudC5hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMwOC0zMDkKICAgIC8vICMgRm9yd2FyZCBlc2Nyb3cgdG8gdGhlIG5ldyBUcnVzdFZhcmlhdGlvbiBhcHAgYWNjb3VudC4KICAgIC8vIGlmIGFzc2V0X2lkX3ZhbHVlID09IFVJbnQ2NCgwKToKICAgIGR1cAogICAgYm56IGNyZWF0ZV9leHBlcmltZW50X3dpdGhfdmFyaWF0aW9uX2Vsc2VfYm9keUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMxMC0zMTQKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PWVzY3Jvd19hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzExCiAgICAvLyByZWNlaXZlcj1uZXdfYXBwLmFkZHJlc3MsCiAgICBkaWcgMTIKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGRpZyAxMgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMTAKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMTMKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzEwLTMxNAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPW5ld19hcHAuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ9ZXNjcm93X2Ftb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMyMy0zMzIKICAgIC8vICMgUmVjb3JkIHRoZSBkZXBvc2l0IGluIFRydXN0VmFyaWF0aW9uCiAgICAvLyAjIFNlbGVjdG9yOiByZWNvcmRfZXNjcm93KHVpbnQ2NCl2b2lkCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9bmV3X2FwcCwKICAgIC8vICAgICBhcHBfYXJncz0oCiAgICAvLyAgICAgICAgIEJ5dGVzKGIiXHg1Y1x4OWFceDgzXHg2YiIpLAogICAgLy8gICAgICAgICBhcmM0LlVJbnQ2NChlc2Nyb3dfYW1vdW50KS5ieXRlcywKICAgIC8vICAgICApLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMyOQogICAgLy8gYXJjNC5VSW50NjQoZXNjcm93X2Ftb3VudCkuYnl0ZXMsCiAgICBkaWcgMTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMjgKICAgIC8vIEJ5dGVzKGIiXHg1Y1x4OWFceDgzXHg2YiIpLAogICAgYnl0ZWMgMTAgLy8gMHg1YzlhODM2YgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMTIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzIzLTMyNQogICAgLy8gIyBSZWNvcmQgdGhlIGRlcG9zaXQgaW4gVHJ1c3RWYXJpYXRpb24KICAgIC8vICMgU2VsZWN0b3I6IHJlY29yZF9lc2Nyb3codWludDY0KXZvaWQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMzEKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzIzLTMzMgogICAgLy8gIyBSZWNvcmQgdGhlIGRlcG9zaXQgaW4gVHJ1c3RWYXJpYXRpb24KICAgIC8vICMgU2VsZWN0b3I6IHJlY29yZF9lc2Nyb3codWludDY0KXZvaWQKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1uZXdfYXBwLAogICAgLy8gICAgIGFwcF9hcmdzPSgKICAgIC8vICAgICAgICAgQnl0ZXMoYiJceDVjXHg5YVx4ODNceDZiIiksCiAgICAvLyAgICAgICAgIGFyYzQuVUludDY0KGVzY3Jvd19hbW91bnQpLmJ5dGVzLAogICAgLy8gICAgICksCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMzNgogICAgLy8gZXhwX2lkLmFzX3VpbnQ2NCgpICogVUludDY0KDQyOTQ5NjcyOTYpICsgdmFyX2lkLmFzX3VpbnQ2NCgpCiAgICBkaWcgMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyNjItMjYzCiAgICAvLyAjIENyZWF0ZSB0aGUgZXhwZXJpbWVudCBncm91cAogICAgLy8gZXhwX2lkID0gYXJjNC5VSW50MzIoc2VsZi5leHBlcmltZW50X2NvdW50LnZhbHVlKQogICAgaW50Y18zIC8vIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMzYKICAgIC8vIGV4cF9pZC5hc191aW50NjQoKSAqIFVJbnQ2NCg0Mjk0OTY3Mjk2KSArIHZhcl9pZC5hc191aW50NjQoKQogICAgZXh0cmFjdF91aW50MzIKICAgIGludGMgNSAvLyA0Mjk0OTY3Mjk2CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzM0LTMzNwogICAgLy8gIyBTdG9yZSB2YXJpYXRpb24gaW5mbwogICAgLy8gdmFyaWF0aW9uX2tleSA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGV4cF9pZC5hc191aW50NjQoKSAqIFVJbnQ2NCg0Mjk0OTY3Mjk2KSArIHZhcl9pZC5hc191aW50NjQoKQogICAgLy8gKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM0MAogICAgLy8gYXBwX2lkPWFyYzQuVUludDY0KG5ld19hcHAuaWQpLAogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM0MgogICAgLy8gY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjczLTI3NAogICAgLy8gIyBDcmVhdGUgdGhlIGZpcnN0IHZhcmlhdGlvbiAodmFyX2lkID0gMCkKICAgIC8vIHZhcl9pZCA9IGFyYzQuVUludDMyKDApCiAgICBieXRlYyAxMiAvLyAweDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzM4LTM0MwogICAgLy8gc2VsZi52YXJpYXRpb25zW3ZhcmlhdGlvbl9rZXldID0gVmFyaWF0aW9uSW5mbygKICAgIC8vICAgICB2YXJfaWQ9dmFyX2lkLAogICAgLy8gICAgIGFwcF9pZD1hcmM0LlVJbnQ2NChuZXdfYXBwLmlkKSwKICAgIC8vICAgICBsYWJlbD1sYWJlbCwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICkKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGJ5dGVjIDExIC8vIDB4MDAxNgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzM4CiAgICAvLyBzZWxmLnZhcmlhdGlvbnNbdmFyaWF0aW9uX2tleV0gPSBWYXJpYXRpb25JbmZvKAogICAgYnl0ZWMgNyAvLyAweDc2NWYKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzM4LTM0MwogICAgLy8gc2VsZi52YXJpYXRpb25zW3ZhcmlhdGlvbl9rZXldID0gVmFyaWF0aW9uSW5mbygKICAgIC8vICAgICB2YXJfaWQ9dmFyX2lkLAogICAgLy8gICAgIGFwcF9pZD1hcmM0LlVJbnQ2NChuZXdfYXBwLmlkKSwKICAgIC8vICAgICBsYWJlbD1sYWJlbCwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzQ4CiAgICAvLyBvd25lcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzUwCiAgICAvLyBjcmVhdGVkX2F0PXNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXS5jcmVhdGVkX2F0LAogICAgZGlnIDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzggLy8gMzgKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM0NS0zNTIKICAgIC8vICMgU2V0IHZhcmlhdGlvbl9jb3VudCB0byAxCiAgICAvLyBzZWxmLmV4cGVyaW1lbnRzW2V4cF9pZF0gPSBFeHBlcmltZW50R3JvdXAoCiAgICAvLyAgICAgZXhwX2lkPWV4cF9pZCwKICAgIC8vICAgICBvd25lcj1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICAvLyAgICAgbmFtZT1uYW1lLAogICAgLy8gICAgIGNyZWF0ZWRfYXQ9c2VsZi5leHBlcmltZW50c1tleHBfaWRdLmNyZWF0ZWRfYXQsCiAgICAvLyAgICAgdmFyaWF0aW9uX2NvdW50PWFyYzQuVUludDY0KDEpLAogICAgLy8gKQogICAgZGlnIDE3CiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlYyA1IC8vIDB4MDAzNgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozNTEKICAgIC8vIHZhcmlhdGlvbl9jb3VudD1hcmM0LlVJbnQ2NCgxKSwKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozNDUtMzUyCiAgICAvLyAjIFNldCB2YXJpYXRpb25fY291bnQgdG8gMQogICAgLy8gc2VsZi5leHBlcmltZW50c1tleHBfaWRdID0gRXhwZXJpbWVudEdyb3VwKAogICAgLy8gICAgIGV4cF9pZD1leHBfaWQsCiAgICAvLyAgICAgb3duZXI9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIG5hbWU9bmFtZSwKICAgIC8vICAgICBjcmVhdGVkX2F0PXNlbGYuZXhwZXJpbWVudHNbZXhwX2lkXS5jcmVhdGVkX2F0LAogICAgLy8gICAgIHZhcmlhdGlvbl9jb3VudD1hcmM0LlVJbnQ2NCgxKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgZGlnIDE0CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weToyMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9lbHNlX2JvZHlAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzE2LTMyMQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9QXNzZXQoYXNzZXRfaWRfdmFsdWUpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPW5ld19hcHAuYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9ZXNjcm93X2Ftb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMTgKICAgIC8vIGFzc2V0X3JlY2VpdmVyPW5ld19hcHAuYWRkcmVzcywKICAgIGRpZyAxMgogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgZGlnIDEyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMTYKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjMyMAogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozMTYtMzIxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChhc3NldF9pZF92YWx1ZSksCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9bmV3X2FwcC5hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1lc2Nyb3dfYW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb25fYWZ0ZXJfaWZfZWxzZUAxNAoKY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb25fZWxzZV9ib2R5QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjU2CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcudHlwZSA9PSBUcmFuc2FjdGlvblR5cGUuQXNzZXRUcmFuc2ZlciwgIkVzY3JvdyBtdXN0IGJlIEFzc2V0VHJhbnNmZXIgZm9yIEFTQSIKICAgIGRpZyAxCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gRXNjcm93IG11c3QgYmUgQXNzZXRUcmFuc2ZlciBmb3IgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjU3CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgIldyb25nIGVzY3JvdyByZWNlaXZlciIKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgZXNjcm93IHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjU4CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcueGZlcl9hc3NldC5pZCA9PSBhc3NldF9pZF92YWx1ZSwgIldyb25nIGFzc2V0IgogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MjU5CiAgICAvLyBhc3NlcnQgZXNjcm93X2Z1bmRpbmcuYXNzZXRfYW1vdW50ID4gVUludDY0KDApLCAiRXNjcm93IG11c3QgYmUgPiAwIgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYnVyeSAxMwogICAgYXNzZXJ0IC8vIEVzY3JvdyBtdXN0IGJlID4gMAogICAgYiBjcmVhdGVfZXhwZXJpbWVudF93aXRoX3ZhcmlhdGlvbl9hZnRlcl9pZl9lbHNlQDcKCmNyZWF0ZV9leHBlcmltZW50X3dpdGhfdmFyaWF0aW9uX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA+PSBVSW50NjQoX1ZBUl9BUFBfTUJSX0FTQSksICJNQlIgbXVzdCBiZSA+PSAwLjIgQUxHTyIKICAgIGRpZyAyCiAgICBndHhucyBBbW91bnQKICAgIGludGMgNiAvLyAyMDAwMDAKICAgID49CiAgICBhc3NlcnQgLy8gTUJSIG11c3QgYmUgPj0gMC4yIEFMR08KICAgIGIgY3JlYXRlX2V4cGVyaW1lbnRfd2l0aF92YXJpYXRpb25fYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnRydXN0X2V4cGVyaW1lbnRzLmNvbnRyYWN0LlRydXN0RXhwZXJpbWVudHMuZ2V0X2V4cGVyaW1lbnRbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfZXhwZXJpbWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM1OAogICAgLy8gYXNzZXJ0IGV4cF9pZCBpbiBzZWxmLmV4cGVyaW1lbnRzLCAiRXhwZXJpbWVudCBub3QgZm91bmQiCiAgICBieXRlYyA2IC8vIDB4NjU1ZgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEV4cGVyaW1lbnQgbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzU5CiAgICAvLyByZXR1cm4gc2VsZi5leHBlcmltZW50c1tleHBfaWRdCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90cnVzdF9leHBlcmltZW50cy9jb250cmFjdC5weTozNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50cnVzdF9leHBlcmltZW50cy5jb250cmFjdC5UcnVzdEV4cGVyaW1lbnRzLmdldF92YXJpYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdmFyaWF0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDMyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzYzCiAgICAvLyBrZXkgPSBhcmM0LlVJbnQ2NChleHBfaWQuYXNfdWludDY0KCkgKiBVSW50NjQoNDI5NDk2NzI5NikgKyB2YXJfaWQuYXNfdWludDY0KCkpCiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgKgogICAgc3dhcAogICAgYnRvaQogICAgKwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM2NAogICAgLy8gYXNzZXJ0IGtleSBpbiBzZWxmLnZhcmlhdGlvbnMsICJWYXJpYXRpb24gbm90IGZvdW5kIgogICAgYnl0ZWMgNyAvLyAweDc2NWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBWYXJpYXRpb24gbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvdHJ1c3RfZXhwZXJpbWVudHMvY29udHJhY3QucHk6MzY1CiAgICAvLyByZXR1cm4gc2VsZi52YXJpYXRpb25zW2tleV0KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3RydXN0X2V4cGVyaW1lbnRzL2NvbnRyYWN0LnB5OjM2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAHAAEIBKCNBoCAgIAQwJoMJg0LdHZfYXBwcm92YWwIdHZfY2xlYXIQZXhwZXJpbWVudF9jb3VudAQVH3x1DHJlZ2lzdHJ5X2FwcAIANgJlXwJ2XwgAAAAAAAAAAAS424YFBFyag2sCABYEAAAAADEYQAAHJwQiZyoiZzEZFEQxGEEAOYIHBCmcNSEE+DTHXAQwJ3y1BHZjLikE+/vR7QS+YXvKBBrzdq02GgCOBwAeAGUAqwDzAxAFIgU7AIAEJA0vZzYaAI4BAAEANhoBSRUkEkQXJwRMZyNDNhoBSSJZgQIISwEVEkRXAgA2GgJJIlmBAghLARUSRFcCADEWIwlJOBAjEkQxADIJEkQ4BzIKEkQovEgoTwK/KbxIKUy/I0M2GgFJFSQSRDEWIwlJOBAjEkRMF0lOAklESwE4BzIKEkRMOAghBA9EMgpMcABFAUAAErEyCiKyErIUSbIRJbIQIrIBsyNDNhoBSSJZgQIISwEVEkQiKmVESRZJk4EgDkRXBARMIwgqTGcxADIHFksCTwJQJwVQTFAnCFBPAlAnBksCUEm8SEy/K0xQsCNDIkmAAEcCNhoBRwIVJRJENhoCSU4CSSJZgQIITBUSRDYaA0lOAhUkEkQ2GgRJTgIVJBJENhoFSU4CFSQSRDYaBklOAhUkEkQ2GgdJTgJJFSQSRDYaCElOAxUkEkQxFoECCUlOA0k4ECMSRDEWIwlOAycGTwNQSU4DSb1FAURJvkhOAyWBILpJTgMxABJEKL1FAUQpvUUBREwXSU8COAcyChJEQAFtSwU4CCEED0RJQAFCSwRJOBAjEkRJOAcyChJEOAhJRRFESwOBLiS6F0lFEBZJRRRJk4EgDkRXBARJRROxKL5EKb5EMggWMQAiJwRlRBYnCbIaTwKyGksSshpPBLIaTLIaSw6yGksNshpLDLIaSwuyGksKshqyGksIshojsjWBELI0skKyQIEGshAisgGztD1JRRKxcghESwY4CLIIsgcjshAisgGzSUAAjLFLEHIIREsQsgiyByOyECKyAbOxSw8WJwqyGrIaSxBJshiBBrIQIrIBs0sESU4CIiW6SRchBQtLFiVaCBZPAhYyBxZLFksCUCcLUExQSxFQJwdPA1BJvEhMv0sFSYEkWUsBFVJLA4EmJLpLEyMIFk8ESwdQJwVQTwJQTFBMUEsCvEhPAky/K0xQsCNDsUsQcghESxCyErIUSbIRJbIQIrIBs0L/bksESTgQJRJESTgUMgoSREk4EUsCEkQ4EklFEURC/rRLBTgIIQYPREL+kCJHAoAASTYaAUcCIlmBAghMFRJENhoCRwIiWYECCEwVEkQ2GgNJFSQSRDYaBEkVJBJENhoFSRUkEkQ2GgZJFSQSRDYaB0cCFSQSRDYaCElOAhUkEkQxFoECCUlOAkk4ECMSRDEWIwlOAii9RQFEKb1FAURMF0lPAjgHMgoSREABhksCOAghBA9ESUABW0sBSTgQIxJESTgHMgoSRDgISUUNRCIqZURJFklFEkmTgSAORFcEBElOAkUQIwgqTGcxADIHFksCTwJQJwVQTFAnCFBLDFAnBksCUElFEkm8SEy/sSi+RCm+RDIIFjEAIicEZUQWJwmyGk8CshpPBLIaJwyyGkyyGksLshpLCrIaSwmyGksIshpLB7IashpLBbIaI7I1gRCyNLJCskCBBrIQIrIBs7Q9SUUOsXIIREsDOAiyCLIHI7IQIrIBs0lAAIGxSwxyCERLDLIIsgcjshAisgGzsUsLFicKshqyGksMSbIYgQayECKyAbNLECVaIQULFkwWMgcWJwxLAlAnC1BMUEsMUCcHTwNQSbxITL8xAEsQSU4CgSYkuksRSU4ETwJQJwVQTFCACAAAAAAAAAABUEsOUEsBvEi/TFArTFCwI0OxSwxyCERLDLISshRJshElshAisgGzQv95SwFJOBAlEkRJOBQyChJESTgRSwISRDgSSUUNREL+m0sCOAghBg9EQv53NhoBSRUlEkQnBkxQSb1FAUS+SCtMULAjQzYaAUkVJRJENhoCSRUlEkRMFyEFC0wXCBYnB0xQSb1FAUS+SCtMULAjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 4, "patch": 0 } }, "events": [], "templateVariables": {} }