{ "name": "WenPadSaleFactory", "desc": "", "methods": [ { "name": "createApplication", "args": [ { "name": "router", "type": "uint64" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] } }, { "name": "createSale", "desc": "Deploy a new sale app. The sender is the distribution wallet: the creator's connected\nwallet that holds the collection and signs the whole setup. (the manager) controls\nthe sale once live. is the packed proceeds split (see PAYOUT_ENTRY_BYTES).\nThe payment must cover the factory's MBR increase (child app + index boxes) plus\nCHILD_SEED; any overpayment is refunded.", "args": [ { "name": "mbrPay", "type": "pay" }, { "name": "admin", "type": "address" }, { "name": "payouts", "type": "byte[]" }, { "name": "price", "type": "uint64" }, { "name": "startRound", "type": "uint64" }, { "name": "endRound", "type": "uint64" }, { "name": "revealFee", "type": "uint64" }, { "name": "deliveryBudget", "type": "uint64" }, { "name": "name", "type": "string" }, { "name": "unitName", "type": "string" }, { "name": "standard", "type": "string" }, { "name": "metadataUrl", "type": "string" } ], "returns": { "type": "uint64" }, "events": [ { "name": "SaleCreated", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "app", "type": "uint64" }, { "name": "admin", "type": "address" }, { "name": "distribution", "type": "address" } ], "desc": "" } ], "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "syncSale", "desc": "Called by a sale app whenever its state changes.", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "price", "type": "uint64" }, { "name": "endRound", "type": "uint64" }, { "name": "totalItems", "type": "uint64" }, { "name": "sold", "type": "uint64" }, { "name": "status", "type": "uint64" } ], "returns": { "type": "void" }, "events": [ { "name": "SaleSynced", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "status", "type": "uint64" }, { "name": "totalItems", "type": "uint64" }, { "name": "sold", "type": "uint64" } ], "desc": "" } ], "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "logPurchase", "desc": "Called by a sale app on every delivered item.", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "asset", "type": "uint64" }, { "name": "buyer", "type": "address" }, { "name": "price", "type": "uint64" }, { "name": "sold", "type": "uint64" }, { "name": "remaining", "type": "uint64" } ], "returns": { "type": "void" }, "events": [ { "name": "Purchase", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "app", "type": "uint64" }, { "name": "asset", "type": "uint64" }, { "name": "buyer", "type": "address" }, { "name": "price", "type": "uint64" } ], "desc": "" } ], "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "updateMetadata", "desc": "Admin-only. Payment covers any MBR increase; any decrease is refunded.", "args": [ { "name": "mbrPay", "type": "pay" }, { "name": "saleId", "type": "uint64" }, { "name": "name", "type": "string" }, { "name": "unitName", "type": "string" }, { "name": "standard", "type": "string" }, { "name": "metadataUrl", "type": "string" } ], "returns": { "type": "void" }, "events": [ { "name": "MetadataUpdated", "args": [ { "name": "saleId", "type": "uint64" } ], "desc": "" } ], "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "deleteSale", "desc": "Callable by anyone (the keeper closes a Shuffle right after its last delivery). Deletes a\nreleased sale app (after its item pages are freed) and its index entries. Nothing can be\nredirected: proceeds go to the payout split, all MBR to the distribution wallet, and the\nsale app itself refuses deletion unless it is released with nothing pending. Purchase\nhistory stays in the event logs.", "args": [ { "name": "saleId", "type": "uint64" } ], "returns": { "type": "void" }, "events": [ { "name": "SaleDeleted", "args": [ { "name": "saleId", "type": "uint64" } ], "desc": "" } ], "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "getSale", "readonly": true, "args": [ { "name": "saleId", "type": "uint64" } ], "returns": { "type": "(uint64,address,address,address,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)", "struct": "SaleRecord" }, "actions": { "create": [], "call": [ "NoOp" ] } }, { "name": "getSaleMetadata", "readonly": true, "args": [ { "name": "saleId", "type": "uint64" } ], "returns": { "type": "(string,string,string,string)", "struct": "SaleMetadata" }, "actions": { "create": [], "call": [ "NoOp" ] } } ], "events": [ { "name": "SaleCreated", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "app", "type": "uint64" }, { "name": "admin", "type": "address" }, { "name": "distribution", "type": "address" } ], "desc": "" }, { "name": "SaleSynced", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "status", "type": "uint64" }, { "name": "totalItems", "type": "uint64" }, { "name": "sold", "type": "uint64" } ], "desc": "" }, { "name": "Purchase", "args": [ { "name": "saleId", "type": "uint64" }, { "name": "app", "type": "uint64" }, { "name": "asset", "type": "uint64" }, { "name": "buyer", "type": "address" }, { "name": "price", "type": "uint64" } ], "desc": "" }, { "name": "MetadataUpdated", "args": [ { "name": "saleId", "type": "uint64" } ], "desc": "" }, { "name": "SaleDeleted", "args": [ { "name": "saleId", "type": "uint64" } ], "desc": "" } ], "arcs": [ 4, 56 ], "structs": { "SaleRecord": [ { "name": "app", "type": "uint64" }, { "name": "admin", "type": "address" }, { "name": "distribution", "type": "address" }, { "name": "payout", "type": "address" }, { "name": "price", "type": "uint64" }, { "name": "startRound", "type": "uint64" }, { "name": "endRound", "type": "uint64" }, { "name": "totalItems", "type": "uint64" }, { "name": "sold", "type": "uint64" }, { "name": "status", "type": "uint64" }, { "name": "createdRound", "type": "uint64" }, { "name": "volume", "type": "uint64" } ], "SaleMetadata": [ { "name": "name", "type": "string" }, { "name": "unitName", "type": "string" }, { "name": "standard", "type": "string" }, { "name": "metadataUrl", "type": "string" } ] }, "state": { "schema": { "global": { "bytes": 0, "ints": 4 }, "local": { "bytes": 0, "ints": 0 } }, "keys": { "global": { "totalSales": { "key": "dG90YWxfc2FsZXM=", "keyType": "AVMBytes", "valueType": "uint64" }, "totalVolume": { "key": "dG90YWxfdm9sdW1l", "keyType": "AVMBytes", "valueType": "uint64" }, "nextSaleId": { "key": "bmV4dF9zYWxlX2lk", "keyType": "AVMBytes", "valueType": "uint64" }, "router": { "key": "YXJjNTk=", "keyType": "AVMBytes", "valueType": "uint64" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "sales": { "keyType": "uint64", "valueType": "SaleRecord", "prefix": "cw==" }, "metadata": { "keyType": "uint64", "valueType": "SaleMetadata", "prefix": "bQ==" }, "creatorSales": { "keyType": "AVMBytes", "valueType": "uint64", "prefix": "Yw==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxIDAgOCAzMiA2IDQwIDIwMDAwMCAyNTYgNjQgMTM2IDE2MApieXRlY2Jsb2NrIDB4IDB4NzMgMHg3NDZmNzQ2MTZjNWY3MzYxNmM2NTczIDB4NmQgMHgwMDAwMDAwMDAwMDAwMDAwIDB4NzQ2Zjc0NjE2YzVmNzY2ZjZjNzU2ZDY1IDB4NmU2NTc4NzQ1ZjczNjE2YzY1NWY2OTY0IDB4MTUxZjdjNzUgMHg2MTcyNjMzNTM5IDB4MDAwOCAweDYzCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNy4yCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnRjIDQgLy8gNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggKmNhbGxfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gcm91dGVyOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGNyZWF0ZUFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGNyZWF0ZUFwcGxpY2F0aW9uCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBjcmVhdGVBcHBsaWNhdGlvbihyb3V0ZXI6IEFwcElEKTogdm9pZApjcmVhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzM0CgkvLyB0aGlzLnRvdGFsU2FsZXMudmFsdWUgPSAwCglieXRlYyAyIC8vICAidG90YWxfc2FsZXMiCglpbnRjIDEgLy8gMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjczNQoJLy8gdGhpcy50b3RhbFZvbHVtZS52YWx1ZSA9IDAKCWJ5dGVjIDUgLy8gICJ0b3RhbF92b2x1bWUiCglpbnRjIDEgLy8gMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjczNgoJLy8gdGhpcy5uZXh0U2FsZUlkLnZhbHVlID0gMQoJYnl0ZWMgNiAvLyAgIm5leHRfc2FsZV9pZCIKCWludGMgMCAvLyAxCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzM3CgkvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcgoJYnl0ZWMgOCAvLyAgImFyYzU5IgoJZnJhbWVfZGlnIC0xIC8vIHJvdXRlcjogQXBwSUQKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGNyZWF0ZVNhbGUocGF5LGFkZHJlc3MsYnl0ZVtdLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKXVpbnQ2NAoqYWJpX3JvdXRlX2NyZWF0ZVNhbGU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGVjIDcgLy8gMHgxNTFmN2M3NQoKCS8vIG1ldGFkYXRhVXJsOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDExCglleHRyYWN0IDIgMAoKCS8vIHN0YW5kYXJkOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEwCglleHRyYWN0IDIgMAoKCS8vIHVuaXROYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDkKCWV4dHJhY3QgMiAwCgoJLy8gbmFtZTogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyA4CglleHRyYWN0IDIgMAoKCS8vIGRlbGl2ZXJ5QnVkZ2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDcKCWJ0b2kKCgkvLyByZXZlYWxGZWU6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgoJYnRvaQoKCS8vIGVuZFJvdW5kOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDUKCWJ0b2kKCgkvLyBzdGFydFJvdW5kOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBwcmljZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgoJLy8gcGF5b3V0czogYnl0ZVtdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoKCS8vIGFkbWluOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAzIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDEwIChhZG1pbikgZm9yIGNyZWF0ZVNhbGUgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIG1iclBheTogcGF5Cgl0eG4gR3JvdXBJbmRleAoJaW50YyAwIC8vIDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludGMgMCAvLyAgcGF5Cgk9PQoKCS8vIGFyZ3VtZW50IDExIChtYnJQYXkpIGZvciBjcmVhdGVTYWxlIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlU2FsZShwYXksYWRkcmVzcyxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdWludDY0CgljYWxsc3ViIGNyZWF0ZVNhbGUKCWl0b2IKCWNvbmNhdAoJbG9nCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBjcmVhdGVTYWxlKG1iclBheTogUGF5VHhuLCBhZG1pbjogQWRkcmVzcywgcGF5b3V0czogYnl0ZXMsIHByaWNlOiB1aW50NjQsIHN0YXJ0Um91bmQ6IHVpbnQ2NCwgZW5kUm91bmQ6IHVpbnQ2NCwgcmV2ZWFsRmVlOiB1aW50NjQsIGRlbGl2ZXJ5QnVkZ2V0OiB1aW50NjQsIG5hbWU6IHN0cmluZywgdW5pdE5hbWU6IHN0cmluZywgc3RhbmRhcmQ6IHN0cmluZywgbWV0YWRhdGFVcmw6IHN0cmluZyk6IHVpbnQ2NAovLwovLyBEZXBsb3kgYSBuZXcgc2FsZSBhcHAuIFRoZSBzZW5kZXIgaXMgdGhlIGRpc3RyaWJ1dGlvbiB3YWxsZXQ6IHRoZSBjcmVhdG9yJ3MgY29ubmVjdGVkCi8vIHdhbGxldCB0aGF0IGhvbGRzIHRoZSBjb2xsZWN0aW9uIGFuZCBzaWducyB0aGUgd2hvbGUgc2V0dXAuIGBhZG1pbmAgKHRoZSBtYW5hZ2VyKSBjb250cm9scwovLyB0aGUgc2FsZSBvbmNlIGxpdmUuIGBwYXlvdXRzYCBpcyB0aGUgcGFja2VkIHByb2NlZWRzIHNwbGl0IChzZWUgUEFZT1VUX0VOVFJZX0JZVEVTKS4KLy8gVGhlIHBheW1lbnQgbXVzdCBjb3ZlciB0aGUgZmFjdG9yeSdzIE1CUiBpbmNyZWFzZSAoY2hpbGQgYXBwICsgaW5kZXggYm94ZXMpIHBsdXMKLy8gQ0hJTERfU0VFRDsgYW55IG92ZXJwYXltZW50IGlzIHJlZnVuZGVkLgpjcmVhdGVTYWxlOgoJcHJvdG8gMTIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyAwIC8vIDB4CglkdXBuIDgKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc2MQoJLy8gZGlzdHJpYnV0aW9uID0gdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglmcmFtZV9idXJ5IDAgLy8gZGlzdHJpYnV0aW9uOiBhZGRyZXNzCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3NjUKCS8vIGFzc2VydChhZG1pbiAhPT0gZGlzdHJpYnV0aW9uKQoJZnJhbWVfZGlnIC0yIC8vIGFkbWluOiBBZGRyZXNzCglmcmFtZV9kaWcgMCAvLyBkaXN0cmlidXRpb246IGFkZHJlc3MKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc2NgoJLy8gYXNzZXJ0KGFkbWluICE9PSBnbG9iYWxzLnplcm9BZGRyZXNzKQoJZnJhbWVfZGlnIC0yIC8vIGFkbWluOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc2OQoJLy8gYXNzZXJ0KHBheW91dHMubGVuZ3RoID4gMCkKCWZyYW1lX2RpZyAtMyAvLyBwYXlvdXRzOiBieXRlcwoJbGVuCglpbnRjIDEgLy8gMAoJPgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3NzAKCS8vIGFzc2VydChwYXlvdXRzLmxlbmd0aCA8PSBQQVlPVVRfRU5UUllfQllURVMgKiBNQVhfUEFZT1VUUykKCWZyYW1lX2RpZyAtMyAvLyBwYXlvdXRzOiBieXRlcwoJbGVuCglwdXNoaW50IDIwMAoJPD0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzcxCgkvLyBhc3NlcnQocGF5b3V0cy5sZW5ndGggJSBQQVlPVVRfRU5UUllfQllURVMgPT09IDApCglmcmFtZV9kaWcgLTMgLy8gcGF5b3V0czogYnl0ZXMKCWxlbgoJaW50YyA1IC8vIDQwCgklCglpbnRjIDEgLy8gMAoJPT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzcyCgkvLyB0b3RhbEJwcyA9IDAKCWludGMgMSAvLyAwCglmcmFtZV9idXJ5IDEgLy8gdG90YWxCcHM6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzczCgkvLyBmb3IgKGxldCBpID0gMDsgaSA8IHBheW91dHMubGVuZ3RoOyBpID0gaSArIFBBWU9VVF9FTlRSWV9CWVRFUykKCWludGMgMSAvLyAwCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgoqZm9yXzA6CgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc3MwoJLy8gaSA8IHBheW91dHMubGVuZ3RoCglmcmFtZV9kaWcgMiAvLyBpOiB1aW50NjQKCWZyYW1lX2RpZyAtMyAvLyBwYXlvdXRzOiBieXRlcwoJbGVuCgk8CglieiAqZm9yXzBfZW5kCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3NzUKCS8vIGFzc2VydChjYXN0Qnl0ZXM8QWRkcmVzcz4oZXh0cmFjdDMocGF5b3V0cywgaSwgMzIpKSAhPT0gZ2xvYmFscy56ZXJvQWRkcmVzcykKCWZyYW1lX2RpZyAtMyAvLyBwYXlvdXRzOiBieXRlcwoJZnJhbWVfZGlnIDIgLy8gaTogdWludDY0CglpbnRjIDMgLy8gMzIKCWV4dHJhY3QzCglnbG9iYWwgWmVyb0FkZHJlc3MKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc3NgoJLy8gYnBzID0gZXh0cmFjdFVpbnQ2NChwYXlvdXRzLCBpICsgMzIpCglmcmFtZV9kaWcgLTMgLy8gcGF5b3V0czogYnl0ZXMKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50YyAzIC8vIDMyCgkrCglleHRyYWN0X3VpbnQ2NAoJZnJhbWVfYnVyeSAzIC8vIGJwczogdWludDY0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3NzcKCS8vIGFzc2VydChicHMgPiAwKQoJZnJhbWVfZGlnIDMgLy8gYnBzOiB1aW50NjQKCWludGMgMSAvLyAwCgk+Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc3OAoJLy8gdG90YWxCcHMgPSB0b3RhbEJwcyArIGJwcwoJZnJhbWVfZGlnIDEgLy8gdG90YWxCcHM6IHVpbnQ2NAoJZnJhbWVfZGlnIDMgLy8gYnBzOiB1aW50NjQKCSsKCWZyYW1lX2J1cnkgMSAvLyB0b3RhbEJwczogdWludDY0CgoqZm9yXzBfY29udGludWU6CgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc3MwoJLy8gaSA9IGkgKyBQQVlPVVRfRU5UUllfQllURVMKCWZyYW1lX2RpZyAyIC8vIGk6IHVpbnQ2NAoJaW50YyA1IC8vIDQwCgkrCglmcmFtZV9idXJ5IDIgLy8gaTogdWludDY0CgliICpmb3JfMAoKKmZvcl8wX2VuZDoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6NzgwCgkvLyBhc3NlcnQodG90YWxCcHMgPT09IEJQU19UT1RBTCkKCWZyYW1lX2RpZyAxIC8vIHRvdGFsQnBzOiB1aW50NjQKCXB1c2hpbnQgMTAwMDAKCT09Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc4MQoJLy8gcGF5b3V0ID0gY2FzdEJ5dGVzPEFkZHJlc3M+KGV4dHJhY3QzKHBheW91dHMsIDAsIDMyKSkKCWZyYW1lX2RpZyAtMyAvLyBwYXlvdXRzOiBieXRlcwoJZXh0cmFjdCAwIDMyCglmcmFtZV9idXJ5IDQgLy8gcGF5b3V0OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3ODMKCS8vIGFzc2VydChlbmRSb3VuZCA+IHN0YXJ0Um91bmQpCglmcmFtZV9kaWcgLTYgLy8gZW5kUm91bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC01IC8vIHN0YXJ0Um91bmQ6IHVpbnQ2NAoJPgoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3ODQKCS8vIGFzc2VydChlbmRSb3VuZCA+IGdsb2JhbHMucm91bmQpCglmcmFtZV9kaWcgLTYgLy8gZW5kUm91bmQ6IHVpbnQ2NAoJZ2xvYmFsIFJvdW5kCgk+Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc4NQoJLy8gYXNzZXJ0KHJldmVhbEZlZSA+PSBNSU5fUkVWRUFMX0ZFRSkKCWZyYW1lX2RpZyAtNyAvLyByZXZlYWxGZWU6IHVpbnQ2NAoJcHVzaGludCAyMDAwMAoJPj0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6Nzg2CgkvLyBhc3NlcnQoZGVsaXZlcnlCdWRnZXQgPj0gTUlOX0RFTElWRVJZX0JVREdFVCkKCWZyYW1lX2RpZyAtOCAvLyBkZWxpdmVyeUJ1ZGdldDogdWludDY0CglwdXNoaW50IDQwMDAwMAoJPj0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6Nzg3CgkvLyBhc3NlcnQobmFtZS5sZW5ndGggPD0gNjQpCglmcmFtZV9kaWcgLTkgLy8gbmFtZTogc3RyaW5nCglsZW4KCWludGMgOCAvLyA2NAoJPD0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6Nzg4CgkvLyBhc3NlcnQodW5pdE5hbWUubGVuZ3RoIDw9IDgpCglmcmFtZV9kaWcgLTEwIC8vIHVuaXROYW1lOiBzdHJpbmcKCWxlbgoJaW50YyAyIC8vIDgKCTw9Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc4OQoJLy8gYXNzZXJ0KHN0YW5kYXJkLmxlbmd0aCA8PSA4KQoJZnJhbWVfZGlnIC0xMSAvLyBzdGFuZGFyZDogc3RyaW5nCglsZW4KCWludGMgMiAvLyA4Cgk8PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3OTAKCS8vIGFzc2VydChtZXRhZGF0YVVybC5sZW5ndGggPD0gMjU2KQoJZnJhbWVfZGlnIC0xMiAvLyBtZXRhZGF0YVVybDogc3RyaW5nCglsZW4KCWludGMgNyAvLyAyNTYKCTw9Cglhc3NlcnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjc5MQoJLy8gdmVyaWZ5UGF5VHhuKG1iclBheSwgewoJLy8gICAgICAgc2VuZGVyOiBkaXN0cmlidXRpb24sCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGNsb3NlUmVtYWluZGVyVG86IGdsb2JhbHMuemVyb0FkZHJlc3MsCgkvLyAgICAgICByZWtleVRvOiBnbG9iYWxzLnplcm9BZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJZnJhbWVfZGlnIDAgLy8gZGlzdHJpYnV0aW9uOiBhZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5IiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6ImRpc3RyaWJ1dGlvbiJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXk6IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgY2xvc2VSZW1haW5kZXJUbwoJZnJhbWVfZGlnIC0xIC8vIG1iclBheTogUGF5VHhuCglndHhucyBDbG9zZVJlbWFpbmRlclRvCglnbG9iYWwgWmVyb0FkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXkiLCJmaWVsZCI6ImNsb3NlUmVtYWluZGVyVG8iLCJleHBlY3RlZCI6Imdsb2JhbHMuemVyb0FkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHJla2V5VG8KCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXk6IFBheVR4bgoJZ3R4bnMgUmVrZXlUbwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoibWJyUGF5IiwiZmllbGQiOiJyZWtleVRvIiwiZXhwZWN0ZWQiOiJnbG9iYWxzLnplcm9BZGRyZXNzIn0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6Nzk4CgkvLyBwcmVNYnIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA1IC8vIHByZU1icjogdWludDY0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo3OTkKCS8vIHNhbGVJZCA9IHRoaXMubmV4dFNhbGVJZC52YWx1ZQoJYnl0ZWMgNiAvLyAgIm5leHRfc2FsZV9pZCIKCWFwcF9nbG9iYWxfZ2V0CglmcmFtZV9idXJ5IDYgLy8gc2FsZUlkOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgwMQoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFdlblBhZFNhbGUucHJvdG90eXBlLmNyZWF0ZUFwcGxpY2F0aW9uPih7CgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IFdlblBhZFNhbGUuYXBwcm92YWxQcm9ncmFtKCksCgkvLyAgICAgICBjbGVhclN0YXRlUHJvZ3JhbTogV2VuUGFkU2FsZS5jbGVhclByb2dyYW0oKSwKCS8vICAgICAgIGdsb2JhbE51bVVpbnQ6IENISUxEX0dMT0JBTF9VSU5UUywKCS8vICAgICAgIGdsb2JhbE51bUJ5dGVTbGljZTogQ0hJTERfR0xPQkFMX0JZVEVTLAoJLy8gICAgICAgZXh0cmFQcm9ncmFtUGFnZXM6IENISUxEX0VYVFJBX1BBR0VTLAoJLy8gICAgICAgbWV0aG9kQXJnczogWwoJLy8gICAgICAgICBzYWxlSWQsCgkvLyAgICAgICAgIGFkbWluLAoJLy8gICAgICAgICBkaXN0cmlidXRpb24sCgkvLyAgICAgICAgIHByaWNlLAoJLy8gICAgICAgICBzdGFydFJvdW5kLAoJLy8gICAgICAgICBlbmRSb3VuZCwKCS8vICAgICAgICAgcmV2ZWFsRmVlLAoJLy8gICAgICAgICBkZWxpdmVyeUJ1ZGdldCwKCS8vICAgICAgICAgdGhpcy5yb3V0ZXIudmFsdWUsCgkvLyAgICAgICBdLAoJLy8gICAgICAgZmVlOiAwLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDQgLy8gIGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCXB1c2hieXRlcyAweGRlM2M4YjQ1IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24odWludDY0LGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgwMgoJLy8gYXBwcm92YWxQcm9ncmFtOiBXZW5QYWRTYWxlLmFwcHJvdmFsUHJvZ3JhbSgpCglQRU5ESU5HX0NPTVBJTEVfQVBQUk9WQUw6IFdlblBhZFNhbGUKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4MDMKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBXZW5QYWRTYWxlLmNsZWFyUHJvZ3JhbSgpCglQRU5ESU5HX0NPTVBJTEVfQ0xFQVI6IFdlblBhZFNhbGUKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgwNAoJLy8gZ2xvYmFsTnVtVWludDogQ0hJTERfR0xPQkFMX1VJTlRTCglwdXNoaW50IDE2CglpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgwNQoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiBDSElMRF9HTE9CQUxfQllURVMKCXB1c2hpbnQgMgoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgwNgoJLy8gZXh0cmFQcm9ncmFtUGFnZXM6IENISUxEX0VYVFJBX1BBR0VTCglpbnRjIDAgLy8gMQoJaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODA3CgkvLyBtZXRob2RBcmdzOiBbCgkvLyAgICAgICAgIHNhbGVJZCwKCS8vICAgICAgICAgYWRtaW4sCgkvLyAgICAgICAgIGRpc3RyaWJ1dGlvbiwKCS8vICAgICAgICAgcHJpY2UsCgkvLyAgICAgICAgIHN0YXJ0Um91bmQsCgkvLyAgICAgICAgIGVuZFJvdW5kLAoJLy8gICAgICAgICByZXZlYWxGZWUsCgkvLyAgICAgICAgIGRlbGl2ZXJ5QnVkZ2V0LAoJLy8gICAgICAgICB0aGlzLnJvdXRlci52YWx1ZSwKCS8vICAgICAgIF0KCWZyYW1lX2RpZyA2IC8vIHNhbGVJZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC0yIC8vIGFkbWluOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIDAgLy8gZGlzdHJpYnV0aW9uOiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC00IC8vIHByaWNlOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTUgLy8gc3RhcnRSb3VuZDogdWludDY0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJZnJhbWVfZGlnIC02IC8vIGVuZFJvdW5kOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTcgLy8gcmV2ZWFsRmVlOiB1aW50NjQKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCglmcmFtZV9kaWcgLTggLy8gZGVsaXZlcnlCdWRnZXQ6IHVpbnQ2NAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWJ5dGVjIDggLy8gICJhcmM1OSIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODE4CgkvLyBmZWU6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyMAoJLy8gYXBwID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglmcmFtZV9idXJ5IDcgLy8gYXBwOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyMgoJLy8gc2VuZFBheW1lbnQoeyByZWNlaXZlcjogYXBwLmFkZHJlc3MsIGFtb3VudDogQ0hJTERfU0VFRCwgZmVlOiAwIH0pCglpdHhuX2JlZ2luCglpbnRjIDAgLy8gIHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODIyCgkvLyByZWNlaXZlcjogYXBwLmFkZHJlc3MKCWZyYW1lX2RpZyA3IC8vIGFwcDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyMgoJLy8gYW1vdW50OiBDSElMRF9TRUVECglpbnRjIDYgLy8gMjAwMDAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODIyCgkvLyBmZWU6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyMwoJLy8gc2VuZE1ldGhvZENhbGw8dHlwZW9mIFdlblBhZFNhbGUucHJvdG90eXBlLnNldFBheW91dHM+KHsKCS8vICAgICAgIGFwcGxpY2F0aW9uSUQ6IGFwcCwKCS8vICAgICAgIG1ldGhvZEFyZ3M6IFtwYXlvdXRzXSwKCS8vICAgICAgIGZlZTogMCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyA0IC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglwdXNoYnl0ZXMgMHhjYWE0MWZmNCAvLyBtZXRob2QgInNldFBheW91dHMoYnl0ZVtdKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODI0CgkvLyBhcHBsaWNhdGlvbklEOiBhcHAKCWZyYW1lX2RpZyA3IC8vIGFwcDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyNQoJLy8gbWV0aG9kQXJnczogW3BheW91dHNdCglmcmFtZV9kaWcgLTMgLy8gcGF5b3V0czogYnl0ZXMKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODI2CgkvLyBmZWU6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjgyOQoJLy8gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlID0gewoJLy8gICAgICAgYXBwOiBhcHAsCgkvLyAgICAgICBhZG1pbjogYWRtaW4sCgkvLyAgICAgICBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbiwKCS8vICAgICAgIHBheW91dDogcGF5b3V0LAoJLy8gICAgICAgcHJpY2U6IHByaWNlLAoJLy8gICAgICAgc3RhcnRSb3VuZDogc3RhcnRSb3VuZCwKCS8vICAgICAgIGVuZFJvdW5kOiBlbmRSb3VuZCwKCS8vICAgICAgIHRvdGFsSXRlbXM6IDAsCgkvLyAgICAgICBzb2xkOiAwLAoJLy8gICAgICAgc3RhdHVzOiBTVEFUVVNfU0VUVVAsCgkvLyAgICAgICBjcmVhdGVkUm91bmQ6IGdsb2JhbHMucm91bmQsCgkvLyAgICAgICB2b2x1bWU6IDAsCgkvLyAgICAgfQoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgNiAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglmcmFtZV9kaWcgNyAvLyBhcHA6IHVpbnQ2NAoJaXRvYgoJZnJhbWVfZGlnIC0yIC8vIGFkbWluOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGRpc3RyaWJ1dGlvbjogYWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgNCAvLyBwYXlvdXQ6IGFkZHJlc3MKCWNvbmNhdAoJZnJhbWVfZGlnIC00IC8vIHByaWNlOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC01IC8vIHN0YXJ0Um91bmQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglmcmFtZV9kaWcgLTYgLy8gZW5kUm91bmQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglieXRlYyA0IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglieXRlYyA0IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglieXRlYyA0IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgUm91bmQKCWl0b2IKCWNvbmNhdAoJYnl0ZWMgNCAvLyAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJYm94X3B1dAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODQzCgkvLyB0aGlzLm1ldGFkYXRhKHNhbGVJZCkudmFsdWUgPSB7CgkvLyAgICAgICBuYW1lOiBuYW1lLAoJLy8gICAgICAgdW5pdE5hbWU6IHVuaXROYW1lLAoJLy8gICAgICAgc3RhbmRhcmQ6IHN0YW5kYXJkLAoJLy8gICAgICAgbWV0YWRhdGFVcmw6IG1ldGFkYXRhVXJsLAoJLy8gICAgIH0KCWJ5dGVjIDMgLy8gICJtIgoJZnJhbWVfZGlnIDYgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZHVwCglib3hfZGVsCglwb3AKCWJ5dGVjIDAgLy8gIGluaXRpYWwgaGVhZAoJYnl0ZWMgMCAvLyAgaW5pdGlhbCB0YWlsCglieXRlYyA5IC8vICBpbml0aWFsIGhlYWQgb2Zmc2V0CglmcmFtZV9kaWcgLTkgLy8gbmFtZTogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMTAgLy8gdW5pdE5hbWU6IHN0cmluZwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgKnByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTExIC8vIHN0YW5kYXJkOiBzdHJpbmcKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViICpwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0xMiAvLyBtZXRhZGF0YVVybDogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJYm94X3B1dAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODQ5CgkvLyB0aGlzLmNyZWF0b3JTYWxlcyhjb25jYXQoYWRtaW4sIGl0b2Ioc2FsZUlkKSkpLnZhbHVlID0gYXBwCglieXRlYyAxMCAvLyAgImMiCglmcmFtZV9kaWcgLTIgLy8gYWRtaW46IEFkZHJlc3MKCWZyYW1lX2RpZyA2IC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfZGlnIDcgLy8gYXBwOiB1aW50NjQKCWl0b2IKCWJveF9wdXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg1MQoJLy8gdGhpcy5uZXh0U2FsZUlkLnZhbHVlID0gc2FsZUlkICsgMQoJYnl0ZWMgNiAvLyAgIm5leHRfc2FsZV9pZCIKCWZyYW1lX2RpZyA2IC8vIHNhbGVJZDogdWludDY0CglpbnRjIDAgLy8gMQoJKwoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg1MgoJLy8gdGhpcy50b3RhbFNhbGVzLnZhbHVlID0gdGhpcy50b3RhbFNhbGVzLnZhbHVlICsgMQoJYnl0ZWMgMiAvLyAgInRvdGFsX3NhbGVzIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJaW50YyAwIC8vIDEKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NTUKCS8vIHJlcXVpcmVkID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTWJyICsgQ0hJTERfU0VFRAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNSAvLyBwcmVNYnI6IHVpbnQ2NAoJLQoJaW50YyA2IC8vIDIwMDAwMAoJKwoJZnJhbWVfYnVyeSA4IC8vIHJlcXVpcmVkOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg1NgoJLy8gYXNzZXJ0KG1iclBheS5hbW91bnQgPj0gcmVxdWlyZWQpCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfZGlnIDggLy8gcmVxdWlyZWQ6IHVpbnQ2NAoJPj0KCWFzc2VydAoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg1NwoJLy8gbWJyUGF5LmFtb3VudCA+IHJlcXVpcmVkCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJZnJhbWVfZGlnIDggLy8gcmVxdWlyZWQ6IHVpbnQ2NAoJPgoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODU4CgkvLyBzZW5kUGF5bWVudCh7IHJlY2VpdmVyOiBkaXN0cmlidXRpb24sIGFtb3VudDogbWJyUGF5LmFtb3VudCAtIHJlcXVpcmVkLCBmZWU6IDAgfSkKCWl0eG5fYmVnaW4KCWludGMgMCAvLyAgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NTgKCS8vIHJlY2VpdmVyOiBkaXN0cmlidXRpb24KCWZyYW1lX2RpZyAwIC8vIGRpc3RyaWJ1dGlvbjogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODU4CgkvLyBhbW91bnQ6IG1iclBheS5hbW91bnQgLSByZXF1aXJlZAoJZnJhbWVfZGlnIC0xIC8vIG1iclBheTogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyA4IC8vIHJlcXVpcmVkOiB1aW50NjQKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NTgKCS8vIGZlZTogMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg2MQoJLy8gdGhpcy5TYWxlQ3JlYXRlZC5sb2coeyBzYWxlSWQ6IHNhbGVJZCwgYXBwOiBhcHAsIGFkbWluOiBhZG1pbiwgZGlzdHJpYnV0aW9uOiBkaXN0cmlidXRpb24gfSkKCXB1c2hieXRlcyAweDk1ZjhhNWM5IC8vIFNhbGVDcmVhdGVkKHVpbnQ2NCx1aW50NjQsYWRkcmVzcyxhZGRyZXNzKQoJZnJhbWVfZGlnIDYgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyA3IC8vIGFwcDogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMiAvLyBhZG1pbjogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgMCAvLyBkaXN0cmlidXRpb246IGFkZHJlc3MKCWNvbmNhdAoJY29uY2F0Cglsb2cKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg2MgoJLy8gcmV0dXJuIHNhbGVJZDsKCWZyYW1lX2RpZyA2IC8vIHNhbGVJZDogdWludDY0CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBzeW5jU2FsZSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfc3luY1NhbGU6CgkvLyBzdGF0dXM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgoJYnRvaQoKCS8vIHNvbGQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQoJYnRvaQoKCS8vIHRvdGFsSXRlbXM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAoJYnRvaQoKCS8vIGVuZFJvdW5kOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCgkvLyBwcmljZTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gc2FsZUlkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIHN5bmNTYWxlKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQKCWNhbGxzdWIgc3luY1NhbGUKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIHN5bmNTYWxlKHNhbGVJZDogdWludDY0LCBwcmljZTogdWludDY0LCBlbmRSb3VuZDogdWludDY0LCB0b3RhbEl0ZW1zOiB1aW50NjQsIHNvbGQ6IHVpbnQ2NCwgc3RhdHVzOiB1aW50NjQpOiB2b2lkCi8vCi8vIENhbGxlZCBieSBhIHNhbGUgYXBwIHdoZW5ldmVyIGl0cyBzdGF0ZSBjaGFuZ2VzLgpzeW5jU2FsZToKCXByb3RvIDYgMAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODY3CgkvLyB0aGlzLmFzc2VydENhbGxlcklzU2FsZShzYWxlSWQpCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWNhbGxzdWIgYXNzZXJ0Q2FsbGVySXNTYWxlCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NjgKCS8vIHRoaXMuc2FsZXMoc2FsZUlkKS52YWx1ZS5wcmljZSA9IHByaWNlCglwdXNoaW50IDEwNCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTIgLy8gcHJpY2U6IHVpbnQ2NAoJaXRvYgoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg2OQoJLy8gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlLmVuZFJvdW5kID0gZW5kUm91bmQKCXB1c2hpbnQgMTIwIC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyBlbmRSb3VuZDogdWludDY0CglpdG9iCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODcwCgkvLyB0aGlzLnNhbGVzKHNhbGVJZCkudmFsdWUudG90YWxJdGVtcyA9IHRvdGFsSXRlbXMKCXB1c2hpbnQgMTI4IC8vIGhlYWRPZmZzZXQKCWZyYW1lX2RpZyAtNCAvLyB0b3RhbEl0ZW1zOiB1aW50NjQKCWl0b2IKCWJ5dGVjIDEgLy8gICJzIgoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NzEKCS8vIHRoaXMuc2FsZXMoc2FsZUlkKS52YWx1ZS5zb2xkID0gc29sZAoJaW50YyA5IC8vICBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTUgLy8gc29sZDogdWludDY0CglpdG9iCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODcyCgkvLyB0aGlzLnNhbGVzKHNhbGVJZCkudmFsdWUuc3RhdHVzID0gc3RhdHVzCglwdXNoaW50IDE0NCAvLyBoZWFkT2Zmc2V0CglmcmFtZV9kaWcgLTYgLy8gc3RhdHVzOiB1aW50NjQKCWl0b2IKCWJ5dGVjIDEgLy8gICJzIgoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9yZXBsYWNlCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4NzQKCS8vIHRoaXMuU2FsZVN5bmNlZC5sb2coeyBzYWxlSWQ6IHNhbGVJZCwgc3RhdHVzOiBzdGF0dXMsIHRvdGFsSXRlbXM6IHRvdGFsSXRlbXMsIHNvbGQ6IHNvbGQgfSkKCXB1c2hieXRlcyAweDlhOGY0NmFjIC8vIFNhbGVTeW5jZWQodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CglpdG9iCglmcmFtZV9kaWcgLTYgLy8gc3RhdHVzOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC00IC8vIHRvdGFsSXRlbXM6IHVpbnQ2NAoJaXRvYgoJY29uY2F0CglmcmFtZV9kaWcgLTUgLy8gc29sZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJbG9nCglyZXRzdWIKCi8vIGxvZ1B1cmNoYXNlKHVpbnQ2NCx1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfbG9nUHVyY2hhc2U6CgkvLyByZW1haW5pbmc6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgoJYnRvaQoKCS8vIHNvbGQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQoJYnRvaQoKCS8vIHByaWNlOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCgkvLyBidXllcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZHVwCglsZW4KCWludGMgMyAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAzIChidXllcikgZm9yIGxvZ1B1cmNoYXNlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gc2FsZUlkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGxvZ1B1cmNoYXNlKHVpbnQ2NCx1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkCgljYWxsc3ViIGxvZ1B1cmNoYXNlCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBsb2dQdXJjaGFzZShzYWxlSWQ6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0SUQsIGJ1eWVyOiBBZGRyZXNzLCBwcmljZTogdWludDY0LCBzb2xkOiB1aW50NjQsIHJlbWFpbmluZzogdWludDY0KTogdm9pZAovLwovLyBDYWxsZWQgYnkgYSBzYWxlIGFwcCBvbiBldmVyeSBkZWxpdmVyZWQgaXRlbS4KbG9nUHVyY2hhc2U6Cglwcm90byA2IDAKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg3OQoJLy8gdGhpcy5hc3NlcnRDYWxsZXJJc1NhbGUoc2FsZUlkKQoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CgljYWxsc3ViIGFzc2VydENhbGxlcklzU2FsZQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODgwCgkvLyB0aGlzLnNhbGVzKHNhbGVJZCkudmFsdWUuc29sZCA9IHNvbGQKCWludGMgOSAvLyAgaGVhZE9mZnNldAoJZnJhbWVfZGlnIC01IC8vIHNvbGQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X3JlcGxhY2UKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjg4MQoJLy8gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlLnZvbHVtZSA9IHRoaXMuc2FsZXMoc2FsZUlkKS52YWx1ZS52b2x1bWUgKyBwcmljZQoJaW50YyAxMCAvLyAgaGVhZE9mZnNldAoJZHVwCglpbnRjIDIgLy8gOAoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyBwcmljZTogdWludDY0CgkrCglpdG9iCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfcmVwbGFjZQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODgyCgkvLyB0aGlzLnRvdGFsVm9sdW1lLnZhbHVlID0gdGhpcy50b3RhbFZvbHVtZS52YWx1ZSArIHByaWNlCglieXRlYyA1IC8vICAidG90YWxfdm9sdW1lIgoJZHVwCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC00IC8vIHByaWNlOiB1aW50NjQKCSsKCWFwcF9nbG9iYWxfcHV0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4ODQKCS8vIHRoaXMuUHVyY2hhc2UubG9nKHsgc2FsZUlkOiBzYWxlSWQsIGFwcDogZ2xvYmFscy5jYWxsZXJBcHBsaWNhdGlvbklELCBhc3NldDogYXNzZXQsIGJ1eWVyOiBidXllciwgcHJpY2U6IHByaWNlIH0pCglwdXNoYnl0ZXMgMHhkMGI4MzJmNSAvLyBQdXJjaGFzZSh1aW50NjQsdWludDY0LHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCkKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBidXllcjogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTQgLy8gcHJpY2U6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWxvZwoJcmV0c3ViCgovLyB1cGRhdGVNZXRhZGF0YShwYXksdWludDY0LHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyl2b2lkCiphYmlfcm91dGVfdXBkYXRlTWV0YWRhdGE6CgkvLyBtZXRhZGF0YVVybDogc3RyaW5nCgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglleHRyYWN0IDIgMAoKCS8vIHN0YW5kYXJkOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWV4dHJhY3QgMiAwCgoJLy8gdW5pdE5hbWU6IHN0cmluZwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJZXh0cmFjdCAyIDAKCgkvLyBuYW1lOiBzdHJpbmcKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWV4dHJhY3QgMiAwCgoJLy8gc2FsZUlkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBtYnJQYXk6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludGMgMCAvLyAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnRjIDAgLy8gIHBheQoJPT0KCgkvLyBhcmd1bWVudCA1IChtYnJQYXkpIGZvciB1cGRhdGVNZXRhZGF0YSBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIHVwZGF0ZU1ldGFkYXRhKHBheSx1aW50NjQsc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKXZvaWQKCWNhbGxzdWIgdXBkYXRlTWV0YWRhdGEKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIHVwZGF0ZU1ldGFkYXRhKG1iclBheTogUGF5VHhuLCBzYWxlSWQ6IHVpbnQ2NCwgbmFtZTogc3RyaW5nLCB1bml0TmFtZTogc3RyaW5nLCBzdGFuZGFyZDogc3RyaW5nLCBtZXRhZGF0YVVybDogc3RyaW5nKTogdm9pZAovLwovLyBBZG1pbi1vbmx5LiBQYXltZW50IGNvdmVycyBhbnkgTUJSIGluY3JlYXNlOyBhbnkgZGVjcmVhc2UgaXMgcmVmdW5kZWQuCnVwZGF0ZU1ldGFkYXRhOgoJcHJvdG8gNiAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGVjIDAgLy8gMHgKCWR1cG4gMwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODk2CgkvLyBhc3NlcnQodGhpcy5zYWxlcyhzYWxlSWQpLmV4aXN0cykKCWJ5dGVjIDEgLy8gICJzIgoJZnJhbWVfZGlnIC0yIC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4OTcKCS8vIGFkbWluID0gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlLmFkbWluCglpbnRjIDIgLy8gIGhlYWRPZmZzZXQKCWludGMgMyAvLyAzMgoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgLTIgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJY292ZXIgMgoJYm94X2V4dHJhY3QKCWZyYW1lX2J1cnkgMCAvLyBhZG1pbjogYWRkcmVzcwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6ODk4CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSBhZG1pbikKCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAwIC8vIGFkbWluOiBhZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo4OTkKCS8vIGFzc2VydChuYW1lLmxlbmd0aCA8PSA2NCkKCWZyYW1lX2RpZyAtMyAvLyBuYW1lOiBzdHJpbmcKCWxlbgoJaW50YyA4IC8vIDY0Cgk8PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MDAKCS8vIGFzc2VydCh1bml0TmFtZS5sZW5ndGggPD0gOCkKCWZyYW1lX2RpZyAtNCAvLyB1bml0TmFtZTogc3RyaW5nCglsZW4KCWludGMgMiAvLyA4Cgk8PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MDEKCS8vIGFzc2VydChzdGFuZGFyZC5sZW5ndGggPD0gOCkKCWZyYW1lX2RpZyAtNSAvLyBzdGFuZGFyZDogc3RyaW5nCglsZW4KCWludGMgMiAvLyA4Cgk8PQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MDIKCS8vIGFzc2VydChtZXRhZGF0YVVybC5sZW5ndGggPD0gMjU2KQoJZnJhbWVfZGlnIC02IC8vIG1ldGFkYXRhVXJsOiBzdHJpbmcKCWxlbgoJaW50YyA3IC8vIDI1NgoJPD0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTAzCgkvLyB2ZXJpZnlQYXlUeG4obWJyUGF5LCB7IHNlbmRlcjogYWRtaW4sIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzIH0pCgkvLyB2ZXJpZnkgc2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5OiBQYXlUeG4KCWd0eG5zIFNlbmRlcgoJZnJhbWVfZGlnIDAgLy8gYWRtaW46IGFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXkiLCJmaWVsZCI6InNlbmRlciIsImV4cGVjdGVkIjoiYWRtaW4ifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5OiBQYXlUeG4KCWd0eG5zIFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCgkvLyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZmFpbGVkOiB7InR4biI6Im1iclBheSIsImZpZWxkIjoicmVjZWl2ZXIiLCJleHBlY3RlZCI6InRoaXMuYXBwLmFkZHJlc3MifQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MDUKCS8vIHByZU1iciA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcHJlTWJyOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkwNgoJLy8gdGhpcy5tZXRhZGF0YShzYWxlSWQpLmRlbGV0ZSgpCglieXRlYyAzIC8vICAibSIKCWZyYW1lX2RpZyAtMiAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cglib3hfZGVsCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MDcKCS8vIHRoaXMubWV0YWRhdGEoc2FsZUlkKS52YWx1ZSA9IHsKCS8vICAgICAgIG5hbWU6IG5hbWUsCgkvLyAgICAgICB1bml0TmFtZTogdW5pdE5hbWUsCgkvLyAgICAgICBzdGFuZGFyZDogc3RhbmRhcmQsCgkvLyAgICAgICBtZXRhZGF0YVVybDogbWV0YWRhdGFVcmwsCgkvLyAgICAgfQoJYnl0ZWMgMyAvLyAgIm0iCglmcmFtZV9kaWcgLTIgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZHVwCglib3hfZGVsCglwb3AKCWJ5dGVjIDAgLy8gIGluaXRpYWwgaGVhZAoJYnl0ZWMgMCAvLyAgaW5pdGlhbCB0YWlsCglieXRlYyA5IC8vICBpbml0aWFsIGhlYWQgb2Zmc2V0CglmcmFtZV9kaWcgLTMgLy8gbmFtZTogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtNCAvLyB1bml0TmFtZTogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtNSAvLyBzdGFuZGFyZDogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtNiAvLyBtZXRhZGF0YVVybDogc3RyaW5nCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiAqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJYm94X3B1dAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTEzCgkvLyBwb3N0TWJyID0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgMiAvLyBwb3N0TWJyOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkxNgoJLy8gcmVmdW5kID0gbWJyUGF5LmFtb3VudCArIHByZU1icgoJZnJhbWVfZGlnIC0xIC8vIG1iclBheTogUGF5VHhuCglndHhucyBBbW91bnQKCWZyYW1lX2RpZyAxIC8vIHByZU1icjogdWludDY0CgkrCglmcmFtZV9idXJ5IDMgLy8gcmVmdW5kOiB1aW50NjQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkxNwoJLy8gYXNzZXJ0KHJlZnVuZCA+PSBwb3N0TWJyKQoJZnJhbWVfZGlnIDMgLy8gcmVmdW5kOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIHBvc3RNYnI6IHVpbnQ2NAoJPj0KCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTE4CgkvLyByZWZ1bmQgPSByZWZ1bmQgLSBwb3N0TWJyCglmcmFtZV9kaWcgMyAvLyByZWZ1bmQ6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gcG9zdE1icjogdWludDY0CgktCglmcmFtZV9idXJ5IDMgLy8gcmVmdW5kOiB1aW50NjQKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MTkKCS8vIHJlZnVuZCA+IDAKCWZyYW1lX2RpZyAzIC8vIHJlZnVuZDogdWludDY0CglpbnRjIDEgLy8gMAoJPgoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTIwCgkvLyBzZW5kUGF5bWVudCh7IHJlY2VpdmVyOiBhZG1pbiwgYW1vdW50OiByZWZ1bmQsIGZlZTogMCB9KQoJaXR4bl9iZWdpbgoJaW50YyAwIC8vICBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkyMAoJLy8gcmVjZWl2ZXI6IGFkbWluCglmcmFtZV9kaWcgMCAvLyBhZG1pbjogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTIwCgkvLyBhbW91bnQ6IHJlZnVuZAoJZnJhbWVfZGlnIDMgLy8gcmVmdW5kOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MjAKCS8vIGZlZTogMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkyMwoJLy8gdGhpcy5NZXRhZGF0YVVwZGF0ZWQubG9nKHsgc2FsZUlkOiBzYWxlSWQgfSkKCXB1c2hieXRlcyAweGRlYTkxYmIwIC8vIE1ldGFkYXRhVXBkYXRlZCh1aW50NjQpCglmcmFtZV9kaWcgLTIgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJbG9nCglyZXRzdWIKCi8vIGRlbGV0ZVNhbGUodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9kZWxldGVTYWxlOgoJLy8gc2FsZUlkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGRlbGV0ZVNhbGUodWludDY0KXZvaWQKCWNhbGxzdWIgZGVsZXRlU2FsZQoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZGVsZXRlU2FsZShzYWxlSWQ6IHVpbnQ2NCk6IHZvaWQKLy8KLy8gQ2FsbGFibGUgYnkgYW55b25lICh0aGUga2VlcGVyIGNsb3NlcyBhIFNodWZmbGUgcmlnaHQgYWZ0ZXIgaXRzIGxhc3QgZGVsaXZlcnkpLiBEZWxldGVzIGEKLy8gcmVsZWFzZWQgc2FsZSBhcHAgKGFmdGVyIGl0cyBpdGVtIHBhZ2VzIGFyZSBmcmVlZCkgYW5kIGl0cyBpbmRleCBlbnRyaWVzLiBOb3RoaW5nIGNhbiBiZQovLyByZWRpcmVjdGVkOiBwcm9jZWVkcyBnbyB0byB0aGUgcGF5b3V0IHNwbGl0LCBhbGwgTUJSIHRvIHRoZSBkaXN0cmlidXRpb24gd2FsbGV0LCBhbmQgdGhlCi8vIHNhbGUgYXBwIGl0c2VsZiByZWZ1c2VzIGRlbGV0aW9uIHVubGVzcyBpdCBpcyByZWxlYXNlZCB3aXRoIG5vdGhpbmcgcGVuZGluZy4gUHVyY2hhc2UKLy8gaGlzdG9yeSBzdGF5cyBpbiB0aGUgZXZlbnQgbG9ncy4KZGVsZXRlU2FsZToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyAwIC8vIDB4CglkdXBuIDMKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkzNAoJLy8gYXNzZXJ0KHRoaXMuc2FsZXMoc2FsZUlkKS5leGlzdHMpCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTM2CgkvLyBhZG1pbiA9IHRoaXMuc2FsZXMoc2FsZUlkKS52YWx1ZS5hZG1pbgoJaW50YyAyIC8vICBoZWFkT2Zmc2V0CglpbnRjIDMgLy8gMzIKCWJ5dGVjIDEgLy8gICJzIgoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvdmVyIDIKCWJveF9leHRyYWN0CglmcmFtZV9idXJ5IDAgLy8gYWRtaW46IGFkZHJlc3MKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjkzNwoJLy8gYXBwID0gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlLmFwcAoJaW50YyAxIC8vIDAKCWludGMgMiAvLyA4CglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAxIC8vIGFwcDogdWludDY0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5MzgKCS8vIGRpc3RyaWJ1dGlvbiA9IHRoaXMuc2FsZXMoc2FsZUlkKS52YWx1ZS5kaXN0cmlidXRpb24KCWludGMgNSAvLyAgaGVhZE9mZnNldAoJaW50YyAzIC8vIDMyCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJZnJhbWVfYnVyeSAyIC8vIGRpc3RyaWJ1dGlvbjogYWRkcmVzcwoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTQwCgkvLyBwcmVNYnIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSAzIC8vIHByZU1icjogdWludDY0CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5NDIKCS8vIHNlbmRNZXRob2RDYWxsPHR5cGVvZiBXZW5QYWRTYWxlLnByb3RvdHlwZS5kZWxldGVBcHBsaWNhdGlvbj4oewoJLy8gICAgICAgYXBwbGljYXRpb25JRDogYXBwLAoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBmZWU6IDAsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludGMgNCAvLyAgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJcHVzaGJ5dGVzIDB4MjQ4N2MzMmMgLy8gbWV0aG9kICJkZWxldGVBcHBsaWNhdGlvbigpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5NDMKCS8vIGFwcGxpY2F0aW9uSUQ6IGFwcAoJZnJhbWVfZGlnIDEgLy8gYXBwOiB1aW50NjQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTQ0CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTQ1CgkvLyBmZWU6IDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjk0OAoJLy8gdGhpcy5zYWxlcyhzYWxlSWQpLmRlbGV0ZSgpCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cglib3hfZGVsCgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5NDkKCS8vIHRoaXMubWV0YWRhdGEoc2FsZUlkKS5kZWxldGUoKQoJYnl0ZWMgMyAvLyAgIm0iCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2RlbAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTUwCgkvLyB0aGlzLmNyZWF0b3JTYWxlcyhjb25jYXQoYWRtaW4sIGl0b2Ioc2FsZUlkKSkpLmRlbGV0ZSgpCglieXRlYyAxMCAvLyAgImMiCglmcmFtZV9kaWcgMCAvLyBhZG1pbjogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHNhbGVJZDogdWludDY0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJYm94X2RlbAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTUxCgkvLyB0aGlzLnRvdGFsU2FsZXMudmFsdWUgPSB0aGlzLnRvdGFsU2FsZXMudmFsdWUgLSAxCglieXRlYyAyIC8vICAidG90YWxfc2FsZXMiCglkdXAKCWFwcF9nbG9iYWxfZ2V0CglpbnRjIDAgLy8gMQoJLQoJYXBwX2dsb2JhbF9wdXQKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjk1NAoJLy8gc2VuZFBheW1lbnQoeyByZWNlaXZlcjogZGlzdHJpYnV0aW9uLCBhbW91bnQ6IHByZU1iciAtIHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZSwgZmVlOiAwIH0pCglpdHhuX2JlZ2luCglpbnRjIDAgLy8gIHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTU0CgkvLyByZWNlaXZlcjogZGlzdHJpYnV0aW9uCglmcmFtZV9kaWcgMiAvLyBkaXN0cmlidXRpb246IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjk1NAoJLy8gYW1vdW50OiBwcmVNYnIgLSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAzIC8vIHByZU1icjogdWludDY0CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gY29udHJhY3RzXFdlblBhZFNhbGUuYWxnby50czo5NTQKCS8vIGZlZTogMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTU2CgkvLyB0aGlzLlNhbGVEZWxldGVkLmxvZyh7IHNhbGVJZDogc2FsZUlkIH0pCglwdXNoYnl0ZXMgMHhjZDg2YWZjNSAvLyBTYWxlRGVsZXRlZCh1aW50NjQpCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJbG9nCglyZXRzdWIKCi8vIGdldFNhbGUodWludDY0KSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9nZXRTYWxlOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlYyA3IC8vIDB4MTUxZjdjNzUKCgkvLyBzYWxlSWQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgZ2V0U2FsZSh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBnZXRTYWxlCgljb25jYXQKCWxvZwoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZ2V0U2FsZShzYWxlSWQ6IHVpbnQ2NCk6IFNhbGVSZWNvcmQKZ2V0U2FsZToKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTY1CgkvLyByZXR1cm4gdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlOwoJYnl0ZWMgMSAvLyAgInMiCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlCglhc3NlcnQKCXJldHN1YgoKLy8gZ2V0U2FsZU1ldGFkYXRhKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKQoqYWJpX3JvdXRlX2dldFNhbGVNZXRhZGF0YToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CgoJLy8gc2FsZUlkOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGdldFNhbGVNZXRhZGF0YSh1aW50NjQpKHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZykKCWNhbGxzdWIgZ2V0U2FsZU1ldGFkYXRhCgljb25jYXQKCWxvZwoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZ2V0U2FsZU1ldGFkYXRhKHNhbGVJZDogdWludDY0KTogU2FsZU1ldGFkYXRhCmdldFNhbGVNZXRhZGF0YToKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTcwCgkvLyByZXR1cm4gdGhpcy5tZXRhZGF0YShzYWxlSWQpLnZhbHVlOwoJYnl0ZWMgMyAvLyAgIm0iCglmcmFtZV9kaWcgLTEgLy8gc2FsZUlkOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5tZXRhZGF0YShzYWxlSWQpLnZhbHVlCglhc3NlcnQKCXJldHN1YgoKLy8gYXNzZXJ0Q2FsbGVySXNTYWxlKHNhbGVJZDogdWludDY0KTogdm9pZAovLwovLyBBdXRoZW50aWNhdGUgYSBzYWxlIGFwcCBjYWxsYmFjazogdGhlIGNhbGxlciBtdXN0IGJlIHRoZSBhcHAgcmVjb3JkZWQgZm9yIGBzYWxlSWRgLgphc3NlcnRDYWxsZXJJc1NhbGU6Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHNcV2VuUGFkU2FsZS5hbGdvLnRzOjk3NQoJLy8gYXNzZXJ0KHRoaXMuc2FsZXMoc2FsZUlkKS5leGlzdHMpCglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cglib3hfbGVuCglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGNvbnRyYWN0c1xXZW5QYWRTYWxlLmFsZ28udHM6OTc2CgkvLyBhc3NlcnQodGhpcy5zYWxlcyhzYWxlSWQpLnZhbHVlLmFwcCA9PT0gZ2xvYmFscy5jYWxsZXJBcHBsaWNhdGlvbklEKQoJaW50YyAxIC8vIDAKCWludGMgMiAvLyA4CglieXRlYyAxIC8vICAicyIKCWZyYW1lX2RpZyAtMSAvLyBzYWxlSWQ6IHVpbnQ2NAoJaXRvYgoJY29uY2F0Cgljb3ZlciAyCglib3hfZXh0cmFjdAoJYnRvaQoJZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJcHVzaGJ5dGVzIDB4OTczYjYxNmYgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbih1aW50NjQpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCXB1c2hieXRlcyAweDEwYTBlZjM0IC8vIG1ldGhvZCAiY3JlYXRlU2FsZShwYXksYWRkcmVzcyxieXRlW10sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdWludDY0IgoJcHVzaGJ5dGVzIDB4Mjc2NmM4ZTIgLy8gbWV0aG9kICJzeW5jU2FsZSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJcHVzaGJ5dGVzIDB4ZDUwMDU4NmMgLy8gbWV0aG9kICJsb2dQdXJjaGFzZSh1aW50NjQsdWludDY0LGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKCXB1c2hieXRlcyAweDJlYzUyZmVkIC8vIG1ldGhvZCAidXBkYXRlTWV0YWRhdGEocGF5LHVpbnQ2NCxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdm9pZCIKCXB1c2hieXRlcyAweDQyMmQ0YzBhIC8vIG1ldGhvZCAiZGVsZXRlU2FsZSh1aW50NjQpdm9pZCIKCXB1c2hieXRlcyAweDBmODdlYjhmIC8vIG1ldGhvZCAiZ2V0U2FsZSh1aW50NjQpKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKCXB1c2hieXRlcyAweDI0NTQxZjNjIC8vIG1ldGhvZCAiZ2V0U2FsZU1ldGFkYXRhKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nKSIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlU2FsZSAqYWJpX3JvdXRlX3N5bmNTYWxlICphYmlfcm91dGVfbG9nUHVyY2hhc2UgKmFiaV9yb3V0ZV91cGRhdGVNZXRhZGF0YSAqYWJpX3JvdXRlX2RlbGV0ZVNhbGUgKmFiaV9yb3V0ZV9nZXRTYWxlICphYmlfcm91dGVfZ2V0U2FsZU1ldGFkYXRhCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1Yg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" } }