LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogQGZpbGUgICAgIGNyeXB0by5jDQogKiBAdmVyc2lvbiAgVjEuMTANCiAqIEBicmllZiAgQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciBkcml2ZXIgc291cmNlIGZpbGUNCiAqDQogKiBAY29weXJpZ2h0IChDKSAyMDE3IE51dm90b24gVGVjaG5vbG9neSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgIk0yMzUxLmgiDQoNCiNkZWZpbmUgRU5BQkxFX0RFQlVHICAgIDANCiNkZWZpbmUgWE9NX1NVUFBPUlQgICAgIDANCg0KI2lmIEVOQUJMRV9ERUJVRw0KI2RlZmluZSBDUlBUX0RCR01TRyAgIHByaW50Zg0KI2Vsc2UNCiNkZWZpbmUgQ1JQVF9EQkdNU0coLi4uKSAgIGRvIHsgfSB3aGlsZSAoMCkgICAgICAgLyogZGlzYWJsZSBkZWJ1ZyAqLw0KI2VuZGlmDQoNCiNpZiBkZWZpbmVkKF9fSUNDQVJNX18pDQojIHByYWdtYSBkaWFnX3N1cHByZXNzPVBtMDczLCBQbTE0MyAgICAgICAgLyogTWlzcmEgQyBydWxlIDE0LjcgKi8NCiNlbmRpZg0KDQoNCi8qKiBAYWRkdG9ncm91cCBTdGFuZGFyZF9Ecml2ZXIgU3RhbmRhcmQgRHJpdmVyDQogIEB7DQoqLw0KDQovKiogQGFkZHRvZ3JvdXAgQ1JZUFRPX0RyaXZlciBDUllQVE8gRHJpdmVyDQogIEB7DQoqLw0KDQoNCi8qKiBAYWRkdG9ncm91cCBDUllQVE9fRVhQT1JURURfRlVOQ1RJT05TIENSWVBUTyBFeHBvcnRlZCBGdW5jdGlvbnMNCiAgQHsNCiovDQoNCi8qIC8vIEBjb25kIEhJRERFTl9TWU1CT0xTICovDQoNCnN0YXRpYyB1aW50MzJfdCBnX0FFU19DVExbNF07DQpzdGF0aWMgdWludDMyX3QgZ19UREVTX0NUTFs0XTsNCg0Kc3RhdGljIGNoYXIgIGhleF9jaGFyX3RibFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOw0KDQpzdGF0aWMgdm9pZCBkdW1wX2VjY19yZWcoY2hhciAqc3RyLCB1aW50MzJfdCB2b2xhdGlsZSByZWdzW10sIGludDMyX3QgY291bnQpOw0Kc3RhdGljIGNoYXIgZ2V0X050aF9uaWJibGVfY2hhcih1aW50MzJfdCB2YWwzMiwgdWludDMyX3QgaWR4KTsNCnN0YXRpYyB2b2lkIEhleDJSZWcoY2hhciBpbnB1dFtdLCB1aW50MzJfdCB2b2xhdGlsZSByZWdbXSk7DQpzdGF0aWMgdm9pZCBSZWcySGV4KGludDMyX3QgY291bnQsIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdLCBjaGFyIG91dHB1dFtdKTsNCnN0YXRpYyBjaGFyIGNoMmhleChjaGFyIGNoKTsNCnN0YXRpYyB2b2lkIEhleDJSZWdFeChjaGFyIGlucHV0W10sIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdLCBpbnQgc2hpZnQpOw0Kc3RhdGljIGludCAgZ2V0X25pYmJsZV92YWx1ZShjaGFyIGMpOw0KDQovKiAvLyBAZW5kY29uZCBISURERU5fU1lNQk9MUyAqLw0KDQovKioNCiAgKiBAYnJpZWYgIE9wZW4gUFJORyBmdW5jdGlvbg0KICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIHUzMktleVNpemUgICBpdCBpcyBQUk5HIGtleSBzaXplLCBpbmNsdWRpbmc6DQogICogICAgICAgICAtIFxyZWYgUFJOR19LRVlfU0laRV82NA0KICAqICAgICAgICAgLSBccmVmIFBSTkdfS0VZX1NJWkVfMTI4DQogICogICAgICAgICAtIFxyZWYgUFJOR19LRVlfU0laRV8xOTINCiAgKiAgICAgICAgIC0gXHJlZiBQUk5HX0tFWV9TSVpFXzI1Ng0KICAqIEBwYXJhbVtpbl0gIHUzMlNlZWRSZWxvYWQgaXMgUFJORyBzZWVkIHJlbG9hZCBvciBub3QsIGluY2x1ZGluZzoNCiAgKiAgICAgICAgIC0gXHJlZiBQUk5HX1NFRURfQ09OVA0KICAqICAgICAgICAgLSBccmVmIFBSTkdfU0VFRF9SRUxPQUQNCiAgKiBAcGFyYW1baW5dICB1MzJTZWVkICBUaGUgbmV3IHNlZWQuIE9ubHkgdmFsaWQgd2hlbiB1MzJTZWVkUmVsb2FkIGlzIFBSTkdfU0VFRF9SRUxPQUQuDQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIFBSTkdfT3BlbihDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlNlZWRSZWxvYWQsIHVpbnQzMl90IHUzMlNlZWQpDQp7DQogICAgaWYodTMyU2VlZFJlbG9hZCkNCiAgICB7DQogICAgICAgIGNycHQtPlBSTkdfU0VFRCA9IHUzMlNlZWQ7DQogICAgfQ0KDQogICAgY3JwdC0+UFJOR19DVEwgPSAodTMyS2V5U2l6ZSA8PCBDUlBUX1BSTkdfQ1RMX0tFWVNaX1BvcykgfA0KICAgICAgICAgICAgICAgICAgICAgKHUzMlNlZWRSZWxvYWQgPDwgQ1JQVF9QUk5HX0NUTF9TRUVEUkxEX1Bvcyk7DQp9DQoNCi8qKg0KICAqIEBicmllZiAgU3RhcnQgdG8gZ2VuZXJhdGUgb25lIFBSTkcga2V5Lg0KICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEByZXR1cm4gTm9uZQ0KICAqLw0Kdm9pZCBQUk5HX1N0YXJ0KENSUFRfVCAqY3JwdCkNCnsNCiAgICBjcnB0LT5QUk5HX0NUTCB8PSBDUlBUX1BSTkdfQ1RMX1NUQVJUX01zazsNCn0NCg0KLyoqDQogICogQGJyaWVmICBSZWFkIHRoZSBQUk5HIGtleS4NCiAgKiBAcGFyYW1baW5dICAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUgDQogICogQHBhcmFtW291dF0gIHUzMlJhbmRLZXkgIFRoZSBrZXkgYnVmZmVyIHRvIHN0b3JlIG5ld2x5IGdlbmVyYXRlZCBQUk5HIGtleS4NCiAgKiBAcmV0dXJuIE5vbmUNCiAgKi8NCnZvaWQgUFJOR19SZWFkKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyUmFuZEtleVtdKQ0Kew0KICAgIHVpbnQzMl90ICBpLCB3Y250Ow0KDQogICAgd2NudCA9ICgoKGNycHQtPlBSTkdfQ1RMICYgQ1JQVF9QUk5HX0NUTF9LRVlTWl9Nc2spID4+IENSUFRfUFJOR19DVExfS0VZU1pfUG9zKSArIDFVKSAqIDJVOw0KDQogICAgZm9yKGkgPSAwVTsgaSA8IHdjbnQ7IGkrKykNCiAgICB7DQogICAgICAgIHUzMlJhbmRLZXlbaV0gPSBjcnB0LT5QUk5HX0tFWVtpXTsNCiAgICB9DQoNCiAgICBjcnB0LT5QUk5HX0NUTCAmPSB+Q1JQVF9QUk5HX0NUTF9TRUVEUkxEX01zazsNCn0NCg0KDQovKioNCiAgKiBAYnJpZWYgIE9wZW4gQUVTIGVuY3J5cHQvZGVjcnlwdCBmdW5jdGlvbi4NCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLg0KICAqIEBwYXJhbVtpbl0gIHUzMkVuY0RlYyAgICAxOiBBRVMgZW5jb2RlOyAgMDogQUVTIGRlY29kZQ0KICAqIEBwYXJhbVtpbl0gIHUzMk9wTW9kZSAgICBBRVMgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoNCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9FQ0INCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkMNCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DRkINCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9PRkINCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DVFINCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTU9ERV9DQkNfQ1MxDQogICogICAgICAgICAtIFxyZWYgQUVTX01PREVfQ0JDX0NTMg0KICAqICAgICAgICAgLSBccmVmIEFFU19NT0RFX0NCQ19DUzMNCiAgKiBAcGFyYW1baW5dICB1MzJLZXlTaXplIGlzIEFFUyBrZXkgc2l6ZSwgaW5jbHVkaW5nOg0KICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8xMjgNCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMTkyDQogICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzI1Ng0KICAqIEBwYXJhbVtpbl0gIHUzMlN3YXBUeXBlIGlzIEFFUyBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wsIGluY2x1ZGluZzoNCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfTk9fU1dBUA0KICAqICAgICAgICAgLSBccmVmIEFFU19PVVRfU1dBUA0KICAqICAgICAgICAgLSBccmVmIEFFU19JTl9TV0FQDQogICogICAgICAgICAtIFxyZWYgQUVTX0lOX09VVF9TV0FQDQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIEFFU19PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRW5jRGVjLA0KICAgICAgICAgICAgICB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMktleVNpemUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKQ0Kew0KICAgIGNycHQtPkFFU19DVEwgPSAodTMyQ2hhbm5lbCA8PCBDUlBUX0FFU19DVExfQ0hBTk5FTF9Qb3MpIHwNCiAgICAgICAgICAgICAgICAgICAgKHUzMkVuY0RlYyA8PCBDUlBUX0FFU19DVExfRU5DUlBUX1BvcykgfA0KICAgICAgICAgICAgICAgICAgICAodTMyT3BNb2RlIDw8IENSUFRfQUVTX0NUTF9PUE1PREVfUG9zKSB8DQogICAgICAgICAgICAgICAgICAgICh1MzJLZXlTaXplIDw8IENSUFRfQUVTX0NUTF9LRVlTWl9Qb3MpIHwNCiAgICAgICAgICAgICAgICAgICAgKHUzMlN3YXBUeXBlIDw8IENSUFRfQUVTX0NUTF9PVVRTV0FQX1Bvcyk7DQogICAgZ19BRVNfQ1RMW3UzMkNoYW5uZWxdID0gY3JwdC0+QUVTX0NUTDsNCn0NCg0KLyoqDQogICogQGJyaWVmICBTdGFydCBBRVMgZW5jcnlwdC9kZWNyeXB0DQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBBRVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuDQogICogQHBhcmFtW2luXSAgdTMyRE1BTW9kZSAgQUVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6DQogICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgIE9uZSBzaG9wIEFFUyBlbmNyeXB0L2RlY3J5cHQuDQogICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgIENvbnRpbnVvdXMgQUVTIGVuY3J5cHQvZGVjcnlwdC4NCiAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX0xBU1QgICAgICAgTGFzdCBBRVMgZW5jcnlwdC9kZWNyeXB0IG9mIGEgc2VyaWVzIG9mIEFFU19TdGFydC4NCiAgKiBAcmV0dXJuIE5vbmUNCiAgKi8NCnZvaWQgQUVTX1N0YXJ0KENSUFRfVCAqY3JwdCwgaW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJETUFNb2RlKQ0Kew0KICAgIGNycHQtPkFFU19DVEwgPSBnX0FFU19DVExbdTMyQ2hhbm5lbF07DQogICAgY3JwdC0+QUVTX0NUTCB8PSBDUlBUX0FFU19DVExfU1RBUlRfTXNrIHwgKHUzMkRNQU1vZGUgPDwgQ1JQVF9BRVNfQ1RMX0RNQUxBU1RfUG9zKTsNCn0NCg0KLyoqDQogICogQGJyaWVmICBTZXQgQUVTIGtleXMNCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIHUzMkNoYW5uZWwgIEFFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4NCiAgKiBAcGFyYW1baW5dICBhdTMyS2V5cyAgICBBbiB3b3JkIGFycmF5IGNvbnRhaW5zIEFFUyBrZXlzLg0KICAqIEBwYXJhbVtpbl0gIHUzMktleVNpemUgaXMgQUVTIGtleSBzaXplLCBpbmNsdWRpbmc6DQogICogICAgICAgICAtIFxyZWYgQUVTX0tFWV9TSVpFXzEyOA0KICAqICAgICAgICAgLSBccmVmIEFFU19LRVlfU0laRV8xOTINCiAgKiAgICAgICAgIC0gXHJlZiBBRVNfS0VZX1NJWkVfMjU2DQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIEFFU19TZXRLZXkoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCBhdTMyS2V5c1tdLCB1aW50MzJfdCB1MzJLZXlTaXplKQ0Kew0KICAgIHVpbnQzMl90ICBpLCB3Y250LCBrZXlfcmVnX2FkZHI7DQoNCiAgICBrZXlfcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfS0VZWzBdICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOw0KICAgIHdjbnQgPSA0VUwgKyB1MzJLZXlTaXplICogMlVMOw0KDQogICAgZm9yKGkgPSAwVTsgaSA8IHdjbnQ7IGkrKykNCiAgICB7DQogICAgICAgIG91dHB3KGtleV9yZWdfYWRkciwgYXUzMktleXNbaV0pOw0KICAgICAgICBrZXlfcmVnX2FkZHIgKz0gNFVMOw0KICAgIH0NCn0NCg0KLyoqDQogICogQGJyaWVmICBTZXQgQUVTIGluaXRpYWwgdmVjdG9ycw0KICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUgDQogICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLg0KICAqIEBwYXJhbVtpbl0gIGF1MzJJViAgICAgIEEgZm91ciBlbnRyeSB3b3JkIGFycmF5IGNvbnRhaW5zIEFFUyBpbml0aWFsIHZlY3RvcnMuDQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIEFFU19TZXRJbml0VmVjdChDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJJVltdKQ0Kew0KICAgIHVpbnQzMl90ICBpLCBrZXlfcmVnX2FkZHI7DQoNCiAgICBrZXlfcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPkFFUzBfSVZbMF0gKyAodTMyQ2hhbm5lbCAqIDB4M0NVTCk7DQoNCiAgICBmb3IoaSA9IDBVOyBpIDwgNFU7IGkrKykNCiAgICB7DQogICAgICAgIG91dHB3KGtleV9yZWdfYWRkciwgYXUzMklWW2ldKTsNCiAgICAgICAga2V5X3JlZ19hZGRyICs9IDRVTDsNCiAgICB9DQp9DQoNCi8qKg0KICAqIEBicmllZiAgU2V0IEFFUyBETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4NCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgQUVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLg0KICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBBRVMgRE1BIHNvdXJjZSBhZGRyZXNzDQogICogQHBhcmFtW2luXSAgdTMyRHN0QWRkciAgIEFFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcw0KICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250ICBBRVMgRE1BIHRyYW5zZmVyIGJ5dGUgY291bnQNCiAgKiBAcmV0dXJuIE5vbmUNCiAgKi8NCnZvaWQgQUVTX1NldERNQVRyYW5zZmVyKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyU3JjQWRkciwNCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KQ0Kew0KICAgIHVpbnQzMl90ICByZWdfYWRkcjsNCg0KICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX1NBRERSICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOw0KICAgIG91dHB3KHJlZ19hZGRyLCB1MzJTcmNBZGRyKTsNCg0KICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0RBRERSICsgKHUzMkNoYW5uZWwgKiAweDNDVUwpOw0KICAgIG91dHB3KHJlZ19hZGRyLCB1MzJEc3RBZGRyKTsNCg0KICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5BRVMwX0NOVCArICh1MzJDaGFubmVsICogMHgzQ1VMKTsNCiAgICBvdXRwdyhyZWdfYWRkciwgdTMyVHJhbnNDbnQpOw0KfQ0KDQovKioNCiAgKiBAYnJpZWYgIE9wZW4gVERFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb24uDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUgDQogICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgIFRERVMgY2hhbm5lbC4gTXVzdCBiZSAwfjMuDQogICogQHBhcmFtW2luXSAgdTMyRW5jRGVjICAgIDE6IFRERVMgZW5jb2RlOyAwOiBUREVTIGRlY29kZQ0KICAqIEBwYXJhbVtpbl0gIElzM0RFUyAgICAgICAxOiBUREVTOyAwOiBERVMNCiAgKiBAcGFyYW1baW5dICBJczNLZXkgICAgICAgMTogVERFUyAzIGtleSBtb2RlOyAwOiBUREVTIDIga2V5IG1vZGUNCiAgKiBAcGFyYW1baW5dICB1MzJPcE1vZGUgICAgVERFUyBvcGVyYXRpb24gbW9kZSwgaW5jbHVkaW5nOg0KICAqICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9FQ0INCiAgKiAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ0JDDQogICogICAgICAgICAtIFxyZWYgVERFU19NT0RFX0NGQg0KICAqICAgICAgICAgLSBccmVmIFRERVNfTU9ERV9PRkINCiAgKiAgICAgICAgIC0gXHJlZiBUREVTX01PREVfQ1RSDQogICogQHBhcmFtW2luXSAgdTMyU3dhcFR5cGUgaXMgVERFUyBpbnB1dC9vdXRwdXQgZGF0YSBzd2FwIGNvbnRyb2wgYW5kIHdvcmQgc3dhcCBjb250cm9sLCBpbmNsdWRpbmc6DQogICogICAgICAgICAtIFxyZWYgVERFU19OT19TV0FQDQogICogICAgICAgICAtIFxyZWYgVERFU19XSExfU1dBUA0KICAqICAgICAgICAgLSBccmVmIFRERVNfT1VUX1NXQVANCiAgKiAgICAgICAgIC0gXHJlZiBUREVTX09VVF9XSExfU1dBUA0KICAqICAgICAgICAgLSBccmVmIFRERVNfSU5fU1dBUA0KICAqICAgICAgICAgLSBccmVmIFRERVNfSU5fV0hMX1NXQVANCiAgKiAgICAgICAgIC0gXHJlZiBUREVTX0lOX09VVF9TV0FQDQogICogICAgICAgICAtIFxyZWYgVERFU19JTl9PVVRfV0hMX1NXQVANCiAgKiBAcmV0dXJuIE5vbmUNCiAgKi8NCnZvaWQgVERFU19PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyQ2hhbm5lbCwgdWludDMyX3QgdTMyRW5jRGVjLCBpbnQzMl90IElzM0RFUywgaW50MzJfdCBJczNLZXksDQogICAgICAgICAgICAgICB1aW50MzJfdCB1MzJPcE1vZGUsIHVpbnQzMl90IHUzMlN3YXBUeXBlKQ0Kew0KICAgIGdfVERFU19DVExbdTMyQ2hhbm5lbF0gPSAodTMyQ2hhbm5lbCA8PCBDUlBUX1RERVNfQ1RMX0NIQU5ORUxfUG9zKSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJFbmNEZWMgPDwgQ1JQVF9UREVTX0NUTF9FTkNSUFRfUG9zKSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMk9wTW9kZSB8ICh1MzJTd2FwVHlwZSA8PCBDUlBUX1RERVNfQ1RMX0JMS1NXQVBfUG9zKTsNCiAgICBpZihJczNERVMpDQogICAgew0KICAgICAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdIHw9IENSUFRfVERFU19DVExfVE1PREVfTXNrOw0KICAgIH0NCiAgICBpZihJczNLZXkpDQogICAgew0KICAgICAgICBnX1RERVNfQ1RMW3UzMkNoYW5uZWxdIHw9IENSUFRfVERFU19DVExfM0tFWVNfTXNrOw0KICAgIH0NCn0NCg0KLyoqDQogICogQGJyaWVmICBTdGFydCBUREVTIGVuY3J5cHQvZGVjcnlwdA0KICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgIFRoZSBwb2ludGVyIG9mIENSWVBUTyBtb2R1bGUgDQogICogQHBhcmFtW2luXSAgdTMyQ2hhbm5lbCAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4NCiAgKiBAcGFyYW1baW5dICB1MzJETUFNb2RlICBUREVTIERNQSBjb250cm9sLCBpbmNsdWRpbmc6DQogICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9PTkVfU0hPVCAgIE9uZSBzaG9wIFRERVMgZW5jcnlwdC9kZWNyeXB0Lg0KICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfQ09OVElOVUUgICBDb250aW51b3VzIFRERVMgZW5jcnlwdC9kZWNyeXB0Lg0KICAqICAgICAgICAgLSBccmVmIENSWVBUT19ETUFfTEFTVCAgICAgICBMYXN0IFRERVMgZW5jcnlwdC9kZWNyeXB0IG9mIGEgc2VyaWVzIG9mIFRERVNfU3RhcnQuDQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIFRERVNfU3RhcnQoQ1JQVF9UICpjcnB0LCBpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IHUzMkRNQU1vZGUpDQp7DQogICAgZ19UREVTX0NUTFt1MzJDaGFubmVsXSB8PSBDUlBUX1RERVNfQ1RMX1NUQVJUX01zayB8ICh1MzJETUFNb2RlIDw8IENSUFRfVERFU19DVExfRE1BTEFTVF9Qb3MpOw0KICAgIGNycHQtPlRERVNfQ1RMID0gZ19UREVTX0NUTFt1MzJDaGFubmVsXTsNCn0NCg0KLyoqDQogICogQGJyaWVmICBTZXQgVERFUyBrZXlzDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLg0KICAqIEBwYXJhbVtpbl0gIGF1MzJLZXlzICAgIFRoZSBUREVTIGtleXMuIGF1MzJLZXlzWzBdWzBdIGlzIEtleTAgaGlnaCB3b3JkIGFuZCBhdTMyS2V5c1swXVsxXSBpcyBrZXkwIGxvdyB3b3JkLg0KICAqIEByZXR1cm4gTm9uZQ0KICAqLw0Kdm9pZCBUREVTX1NldEtleShDUlBUX1QgKmNycHQsIHVpbnQzMl90IHUzMkNoYW5uZWwsIHVpbnQzMl90IGF1MzJLZXlzWzNdWzJdKQ0Kew0KICAgIHVpbnQzMl90ICAgaSwgcmVnX2FkZHI7DQoNCiAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfS0VZMUggKyAoMHg0MFVMICogdTMyQ2hhbm5lbCk7DQoNCiAgICBmb3IoaSA9IDBVOyBpIDwgM1U7IGkrKykNCiAgICB7DQogICAgICAgIG91dHB3KHJlZ19hZGRyLCBhdTMyS2V5c1tpXVswXSk7ICAgLyogVERFU25fS0VZeEggKi8NCiAgICAgICAgcmVnX2FkZHIgKz0gNFVMOw0KICAgICAgICBvdXRwdyhyZWdfYWRkciwgYXUzMktleXNbaV1bMV0pOyAgIC8qIFRERVNuX0tFWXhMICovDQogICAgICAgIHJlZ19hZGRyICs9IDRVTDsNCiAgICB9DQp9DQoNCi8qKg0KICAqIEBicmllZiAgU2V0IFRERVMgaW5pdGlhbCB2ZWN0b3JzDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICBUREVTIGNoYW5uZWwuIE11c3QgYmUgMH4zLg0KICAqIEBwYXJhbVtpbl0gIHUzMklWSCAgICAgIFRERVMgaW5pdGlhbCB2ZWN0b3IgaGlnaCB3b3JkLg0KICAqIEBwYXJhbVtpbl0gIHUzMklWTCAgICAgIFRERVMgaW5pdGlhbCB2ZWN0b3IgbG93IHdvcmQuDQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIFRERVNfU2V0SW5pdFZlY3QoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJJVkgsIHVpbnQzMl90IHUzMklWTCkNCnsNCiAgICB1aW50MzJfdCAgcmVnX2FkZHI7DQoNCiAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfSVZIICsgKHUzMkNoYW5uZWwgKiAweDQwVUwpOw0KICAgIG91dHB3KHJlZ19hZGRyLCB1MzJJVkgpOw0KDQogICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0lWTCArICh1MzJDaGFubmVsICogMHg0MFVMKTsNCiAgICBvdXRwdyhyZWdfYWRkciwgdTMySVZMKTsNCn0NCg0KLyoqDQogICogQGJyaWVmICBTZXQgVERFUyBETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4NCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJDaGFubmVsICAgVERFUyBjaGFubmVsLiBNdXN0IGJlIDB+My4NCiAgKiBAcGFyYW1baW5dICB1MzJTcmNBZGRyICAgVERFUyBETUEgc291cmNlIGFkZHJlc3MNCiAgKiBAcGFyYW1baW5dICB1MzJEc3RBZGRyICAgVERFUyBETUEgZGVzdGluYXRpb24gYWRkcmVzcw0KICAqIEBwYXJhbVtpbl0gIHUzMlRyYW5zQ250ICBUREVTIERNQSB0cmFuc2ZlciBieXRlIGNvdW50DQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIFRERVNfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJDaGFubmVsLCB1aW50MzJfdCB1MzJTcmNBZGRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHUzMkRzdEFkZHIsIHVpbnQzMl90IHUzMlRyYW5zQ250KQ0Kew0KICAgIHVpbnQzMl90ICByZWdfYWRkcjsNCg0KICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSZjcnB0LT5UREVTMF9TQUREUiArICh1MzJDaGFubmVsICogMHg0MFVMKTsNCiAgICBvdXRwdyhyZWdfYWRkciwgdTMyU3JjQWRkcik7DQoNCiAgICByZWdfYWRkciA9ICh1aW50MzJfdCkmY3JwdC0+VERFUzBfREFERFIgKyAodTMyQ2hhbm5lbCAqIDB4NDBVTCk7DQogICAgb3V0cHcocmVnX2FkZHIsIHUzMkRzdEFkZHIpOw0KDQogICAgcmVnX2FkZHIgPSAodWludDMyX3QpJmNycHQtPlRERVMwX0NOVCArICh1MzJDaGFubmVsICogMHg0MFVMKTsNCiAgICBvdXRwdyhyZWdfYWRkciwgdTMyVHJhbnNDbnQpOw0KfQ0KDQovKioNCiAgKiBAYnJpZWYgIE9wZW4gU0hBIGVuY3J5cHQgZnVuY3Rpb24uDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICB1MzJPcE1vZGUgICBTSEEgb3BlcmF0aW9uIG1vZGUsIGluY2x1ZGluZzoNCiAgKiAgICAgICAgIC0gXHJlZiBTSEFfTU9ERV9TSEExDQogICogICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMjI0DQogICogICAgICAgICAtIFxyZWYgU0hBX01PREVfU0hBMjU2DQogICogQHBhcmFtW2luXSAgdTMyU3dhcFR5cGUgaXMgU0hBIGlucHV0L291dHB1dCBkYXRhIHN3YXAgY29udHJvbCwgaW5jbHVkaW5nOg0KICAqICAgICAgICAgLSBccmVmIFNIQV9OT19TV0FQDQogICogICAgICAgICAtIFxyZWYgU0hBX09VVF9TV0FQDQogICogICAgICAgICAtIFxyZWYgU0hBX0lOX1NXQVANCiAgKiAgICAgICAgIC0gXHJlZiBTSEFfSU5fT1VUX1NXQVANCiAgKiBAcGFyYW1baW5dICBobWFjX2tleV9sZW4gICBITUFDIGtleSBieXRlIGNvdW50DQogICogQHJldHVybiBOb25lDQogICovDQp2b2lkIFNIQV9PcGVuKENSUFRfVCAqY3JwdCwgdWludDMyX3QgdTMyT3BNb2RlLCB1aW50MzJfdCB1MzJTd2FwVHlwZSwgdWludDMyX3QgaG1hY19rZXlfbGVuKQ0Kew0KICAgIGNycHQtPkhNQUNfQ1RMID0gKHUzMk9wTW9kZSA8PCBDUlBUX0hNQUNfQ1RMX09QTU9ERV9Qb3MpIHwNCiAgICAgICAgICAgICAgICAgICAgICh1MzJTd2FwVHlwZSA8PCBDUlBUX0hNQUNfQ1RMX09VVFNXQVBfUG9zKTsNCg0KICAgIGlmKGhtYWNfa2V5X2xlbiAhPSAwVUwpDQogICAgew0KICAgICAgICBjcnB0LT5ITUFDX0tFWUNOVCA9IGhtYWNfa2V5X2xlbjsNCiAgICB9DQp9DQoNCi8qKg0KICAqIEBicmllZiAgU3RhcnQgU0hBIGVuY3J5cHQNCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIHUzMkRNQU1vZGUgIFRERVMgRE1BIGNvbnRyb2wsIGluY2x1ZGluZzoNCiAgKiAgICAgICAgIC0gXHJlZiBDUllQVE9fRE1BX09ORV9TSE9UICAgT25lIHNob3AgU0hBIGVuY3J5cHQuDQogICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9DT05USU5VRSAgIENvbnRpbnVvdXMgU0hBIGVuY3J5cHQuDQogICogICAgICAgICAtIFxyZWYgQ1JZUFRPX0RNQV9MQVNUICAgICAgIExhc3QgU0hBIGVuY3J5cHQgb2YgYSBzZXJpZXMgb2YgU0hBX1N0YXJ0Lg0KICAqIEByZXR1cm4gTm9uZQ0KICAqLw0Kdm9pZCBTSEFfU3RhcnQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJETUFNb2RlKQ0Kew0KICAgIGNycHQtPkhNQUNfQ1RMICY9IH4oMHg3VUwgPDwgQ1JQVF9ITUFDX0NUTF9ETUFMQVNUX1Bvcyk7DQogICAgY3JwdC0+SE1BQ19DVEwgfD0gQ1JQVF9ITUFDX0NUTF9TVEFSVF9Nc2sgfCAodTMyRE1BTW9kZSA8PCBDUlBUX0hNQUNfQ1RMX0RNQUxBU1RfUG9zKTsNCn0NCg0KLyoqDQogICogQGJyaWVmICBTZXQgU0hBIERNQSB0cmFuc2Zlcg0KICAqIEBwYXJhbVtpbl0gIGNycHQgICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIHUzMlNyY0FkZHIgICBTSEEgRE1BIHNvdXJjZSBhZGRyZXNzDQogICogQHBhcmFtW2luXSAgdTMyVHJhbnNDbnQgIFNIQSBETUEgdHJhbnNmZXIgYnl0ZSBjb3VudA0KICAqIEByZXR1cm4gTm9uZQ0KICAqLw0Kdm9pZCBTSEFfU2V0RE1BVHJhbnNmZXIoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJTcmNBZGRyLCB1aW50MzJfdCB1MzJUcmFuc0NudCkNCnsNCiAgICBjcnB0LT5ITUFDX1NBRERSID0gdTMyU3JjQWRkcjsNCiAgICBjcnB0LT5ITUFDX0RNQUNOVCA9IHUzMlRyYW5zQ250Ow0KfQ0KDQovKioNCiAgKiBAYnJpZWYgIFJlYWQgdGhlIFNIQSBkaWdlc3QuDQogICogQHBhcmFtW2luXSAgIGNycHQgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1bb3V0XSAgdTMyRGlnZXN0ICBUaGUgU0hBIGVuY3J5cHQgb3V0cHV0IGRpZ2VzdC4NCiAgKiBAcmV0dXJuIE5vbmUNCiAgKi8NCnZvaWQgU0hBX1JlYWQoQ1JQVF9UICpjcnB0LCB1aW50MzJfdCB1MzJEaWdlc3RbXSkNCnsNCiAgICB1aW50MzJfdCAgaSwgd2NudCwgcmVnX2FkZHI7DQoNCiAgICBpID0gKGNycHQtPkhNQUNfQ1RMICYgQ1JQVF9ITUFDX0NUTF9PUE1PREVfTXNrKSA+PiBDUlBUX0hNQUNfQ1RMX09QTU9ERV9Qb3M7DQoNCiAgICBpZihpID09IFNIQV9NT0RFX1NIQTEpDQogICAgew0KICAgICAgICB3Y250ID0gNVVMOw0KICAgIH0NCiAgICBlbHNlIGlmKGkgPT0gU0hBX01PREVfU0hBMjI0KQ0KICAgIHsNCiAgICAgICAgd2NudCA9IDdVTDsNCiAgICB9DQogICAgZWxzZSBpZihpID09IFNIQV9NT0RFX1NIQTI1NikNCiAgICB7DQogICAgICAgIHdjbnQgPSA4VUw7DQogICAgfQ0KICAgIGVsc2UgaWYoaSA9PSBTSEFfTU9ERV9TSEEzODQpDQogICAgew0KICAgICAgICB3Y250ID0gMTJVTDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgLyogU0hBX01PREVfU0hBNTEyICovDQogICAgICAgIHdjbnQgPSAxNlVMOw0KICAgIH0NCg0KICAgIHJlZ19hZGRyID0gKHVpbnQzMl90KSAmIChjcnB0LT5ITUFDX0RHU1RbMF0pOw0KICAgIGZvcihpID0gMFVMOyBpIDwgd2NudDsgaSsrKQ0KICAgIHsNCiAgICAgICAgdTMyRGlnZXN0W2ldID0gaW5wdyhyZWdfYWRkcik7DQogICAgICAgIHJlZ19hZGRyICs9IDRVTDsNCiAgICB9DQp9DQoNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8qICAgIEVDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KI2RlZmluZSBFQ0NPUF9QT0lOVF9NVUwgICAgICgweDBVTCA8PCBDUlBUX0VDQ19DVExfRUNDT1BfUG9zKQ0KI2RlZmluZSBFQ0NPUF9NT0RVTEUgICAgICAgICgweDFVTCA8PCBDUlBUX0VDQ19DVExfRUNDT1BfUG9zKQ0KI2RlZmluZSBFQ0NPUF9QT0lOVF9BREQgICAgICgweDJVTCA8PCBDUlBUX0VDQ19DVExfRUNDT1BfUG9zKQ0KI2RlZmluZSBFQ0NPUF9QT0lOVF9ET1VCTEUgICgweDBVTCA8PCBDUlBUX0VDQ19DVExfRUNDT1BfUG9zKQ0KDQojZGVmaW5lIE1PRE9QX0RJViAgICAgICAgICAgKDB4MFVMIDw8IENSUFRfRUNDX0NUTF9NT0RPUF9Qb3MpDQojZGVmaW5lIE1PRE9QX01VTCAgICAgICAgICAgKDB4MVVMIDw8IENSUFRfRUNDX0NUTF9NT0RPUF9Qb3MpDQojZGVmaW5lIE1PRE9QX0FERCAgICAgICAgICAgKDB4MlVMIDw8IENSUFRfRUNDX0NUTF9NT0RPUF9Qb3MpDQojZGVmaW5lIE1PRE9QX1NVQiAgICAgICAgICAgKDB4M1VMIDw8IENSUFRfRUNDX0NUTF9NT0RPUF9Qb3MpDQoNCmVudW0NCnsNCiAgICBDVVJWRV9HRl9QLA0KICAgIENVUlZFX0dGXzJNLA0KfTsNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAgRGVmaW5lIGVsbGlwdGljIGN1cnZlIChFQyk6ICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KI2lmICFYT01fU1VQUE9SVCAvLyBSZXBsYWNlIHdpdGggWE9NIHJlYWR5IGN1cnZlIHRhYmxlDQpjb25zdCBFQ0NfQ1VSVkUgX0N1cnZlW10gPQ0Kew0KICAgIHsNCiAgICAgICAgLyogTklTVDogQ3VydmUgUC0xOTIgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSAqLw0KICAgICAgICBDVVJWRV9QXzE5MiwNCiAgICAgICAgNDgsICAgICAvKiBFY2hhciAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDIiwgICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzIiAqLw0KICAgICAgICAiNjQyMTA1MTllNTljODBlNzBmYTdlOWFiNzIyNDMwNDlmZWI4ZGVlY2MxNDZiOWIxIiwNCiAgICAgICAgIjE4OGRhODBlYjAzMDkwZjY3Y2JmMjBlYjQzYTE4ODAwZjRmZjBhZmQ4MmZmMTAxMiIsDQogICAgICAgICIwNzE5MmI5NWZmYzhkYTc4NjMxMDExZWQ2YjI0Y2RkNTczZjk3N2ExMWU3OTQ4MTEiLA0KICAgICAgICA1OCwgICAgIC8qIEVwbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGIiwgICAvKiAiNjI3NzEwMTczNTM4NjY4MDc2MzgzNTc4OTQyMzIwNzY2NjQxNjA4MzkwODcwMDM5MDMyNDk2MTI3OSIgKi8NCiAgICAgICAgNTgsICAgICAvKiBFb2wgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMSIsICAgLyogIjYyNzcxMDE3MzUzODY2ODA3NjM4MzU3ODk0MjMxNzYwNTkwMTM3NjcxOTQ3NzMxODI4NDIyODQwODEiICovDQogICAgICAgIDE5MiwgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICA3LA0KICAgICAgICAyLA0KICAgICAgICAxLA0KICAgICAgICBDVVJWRV9HRl9QDQogICAgfSwNCiAgICB7DQogICAgICAgIC8qIE5JU1Q6IEN1cnZlIFAtMjI0IDogeV4yPXheMy1heCtiIChtb2QgcCkgKi8NCiAgICAgICAgQ1VSVkVfUF8yMjQsDQogICAgICAgIDU2LCAgICAgLyogRWNoYXIgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFIiwgIC8qICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8NCiAgICAgICAgImI0MDUwYTg1MGMwNGIzYWJmNTQxMzI1NjUwNDRiMGI3ZDdiZmQ4YmEyNzBiMzk0MzIzNTVmZmI0IiwNCiAgICAgICAgImI3MGUwY2JkNmJiNGJmN2YzMjEzOTBiOTRhMDNjMWQzNTZjMjExMjIzNDMyODBkNjExNWMxZDIxIiwNCiAgICAgICAgImJkMzc2Mzg4YjVmNzIzZmI0YzIyZGZlNmNkNDM3NWEwNWEwNzQ3NjQ0NGQ1ODE5OTg1MDA3ZTM0IiwNCiAgICAgICAgNzAsICAgICAvKiBFcGwgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIwMDI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLw0KICAgICAgICA3MCwgICAgIC8qIEVvbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0QiLCAgLyogIjAwMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MjU5NDA0NTc4MDc3MTQ0MjQzOTE3MjE2ODI3MjIzNjgwNjEiICovDQogICAgICAgIDIyNCwgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICA5LA0KICAgICAgICA4LA0KICAgICAgICAzLA0KICAgICAgICBDVVJWRV9HRl9QDQogICAgfSwNCiAgICB7DQogICAgICAgIC8qIE5JU1Q6IEN1cnZlIFAtMjU2IDogeV4yPXheMy1heCtiIChtb2QgcCkgKi8NCiAgICAgICAgQ1VSVkVfUF8yNTYsDQogICAgICAgIDY0LCAgICAgLyogRWNoYXIgKi8NCiAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkMiLCAgLyogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiICovDQogICAgICAgICI1YWM2MzVkOGFhM2E5M2U3YjNlYmJkNTU3Njk4ODZiYzY1MWQwNmIwY2M1M2IwZjYzYmNlM2MzZTI3ZDI2MDRiIiwNCiAgICAgICAgIjZiMTdkMWYyZTEyYzQyNDdmOGJjZTZlNTYzYTQ0MGYyNzcwMzdkODEyZGViMzNhMGY0YTEzOTQ1ZDg5OGMyOTYiLA0KICAgICAgICAiNGZlMzQyZTJmZTFhN2Y5YjhlZTdlYjRhN2MwZjllMTYyYmNlMzM1NzZiMzE1ZWNlY2JiNjQwNjgzN2JmNTFmNSIsDQogICAgICAgIDc4LCAgICAgLyogRXBsICovDQogICAgICAgICJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgIC8qICIxMTU3OTIwODkyMTAzNTYyNDg3NjI2OTc0NDY5NDk0MDc1NzM1MzAwODYxNDM0MTUyOTAzMTQxOTU1MzM2MzEzMDg4NjcwOTc4NTM5NTEiICovDQogICAgICAgIDc4LCAgICAgLyogRW9sICovDQogICAgICAgICJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxIiwgIC8qICIxMTU3OTIwODkyMTAzNTYyNDg3NjI2OTc0NDY5NDk0MDc1NzM1Mjk5OTY5NTUyMjQxMzU3NjAzNDI0MjIyNTkwNjEwNjg1MTIwNDQzNjkiICovDQogICAgICAgIDI1NiwgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICAxMCwNCiAgICAgICAgNSwNCiAgICAgICAgMiwNCiAgICAgICAgQ1VSVkVfR0ZfUA0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBQLTM4NCA6IHleMj14XjMtYXgrYiAobW9kIHApICovDQogICAgICAgIENVUlZFX1BfMzg0LA0KICAgICAgICA5NiwgICAgIC8qIEVjaGFyICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkMiLCAgLyogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyIgKi8NCiAgICAgICAgImIzMzEyZmE3ZTIzZWU3ZTQ5ODhlMDU2YmUzZjgyZDE5MTgxZDljNmVmZTgxNDExMjAzMTQwODhmNTAxMzg3NWFjNjU2Mzk4ZDhhMmVkMTlkMmE4NWM4ZWRkM2VjMmFlZiIsDQogICAgICAgICJhYTg3Y2EyMmJlOGIwNTM3OGViMWM3MWVmMzIwYWQ3NDZlMWQzYjYyOGJhNzliOTg1OWY3NDFlMDgyNTQyYTM4NTUwMmYyNWRiZjU1Mjk2YzNhNTQ1ZTM4NzI3NjBhYjciLA0KICAgICAgICAiMzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmIiwNCiAgICAgICAgMTE2LCAgICAvKiBFcGwgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRiIsICAvKiAiMzk0MDIwMDYxOTYzOTQ0NzkyMTIyNzkwNDAxMDAxNDM2MTM4MDUwNzk3MzkyNzA0NjU0NDY2Njc5NDgyOTM0MDQyNDU3MjE3NzE0OTY4NzAzMjkwNDcyNjYwODgyNTg5MzgwMDE4NjE2MDY5NzMxMTIzMTkiICovDQogICAgICAgIDExNiwgICAgLyogRW9sICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDNzYzNEQ4MUY0MzcyRERGNTgxQTBEQjI0OEIwQTc3QUVDRUMxOTZBQ0NDNTI5NzMiLCAgLyogIjM5NDAyMDA2MTk2Mzk0NDc5MjEyMjc5MDQwMTAwMTQzNjEzODA1MDc5NzM5MjcwNDY1NDQ2NjY3OTQ2OTA1Mjc5NjI3NjU5Mzk5MTEzMjYzNTY5Mzk4OTU2MzA4MTUyMjk0OTEzNTU0NDMzNjUzOTQyNjQzIiAqLw0KICAgICAgICAzODQsICAgIC8qIGtleV9sZW4gKi8NCiAgICAgICAgMTIsDQogICAgICAgIDMsDQogICAgICAgIDIsDQogICAgICAgIENVUlZFX0dGX1ANCiAgICB9LA0KICAgIHsNCiAgICAgICAgLyogTklTVDogQ3VydmUgUC01MjEgOiB5XjI9eF4zLWF4K2IgKG1vZCBwKSovDQogICAgICAgIENVUlZFX1BfNTIxLA0KICAgICAgICAxMzEsICAgIC8qIEVjaGFyICovDQogICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIsICAvKiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiICovDQogICAgICAgICIwNTE5NTNlYjk2MThlMWM5YTFmOTI5YTIxYTBiNjg1NDBlZWEyZGE3MjViOTliMzE1ZjNiOGI0ODk5MThlZjEwOWUxNTYxOTM5NTFlYzdlOTM3YjE2NTJjMGJkM2JiMWJmMDczNTczZGY4ODNkMmMzNGYxZWY0NTFmZDQ2YjUwM2YwMCIsDQogICAgICAgICIwYzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1MjFmODI4YWY2MDZiNGQzZGJhYTE0YjVlNzdlZmU3NTkyOGZlMWRjMTI3YTJmZmE4ZGUzMzQ4YjNjMTg1NmE0MjliZjk3ZTdlMzFjMmU1YmQ2NiIsDQogICAgICAgICIxMTgzOTI5NmE3ODlhM2JjMDA0NWM4YTVmYjQyYzdkMWJkOTk4ZjU0NDQ5NTc5YjQ0NjgxN2FmYmQxNzI3M2U2NjJjOTdlZTcyOTk1ZWY0MjY0MGM1NTBiOTAxM2ZhZDA3NjEzNTNjNzA4NmEyNzJjMjQwODhiZTk0NzY5ZmQxNjY1MCIsDQogICAgICAgIDE1NywgICAgLyogRXBsICovDQogICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsICAvKiAiNjg2NDc5NzY2MDEzMDYwOTcxNDk4MTkwMDc5OTA4MTM5MzIxNzI2OTQzNTMwMDE0MzMwNTQwOTM5NDQ2MzQ1OTE4NTU0MzE4MzM5NzY1NjA1MjEyMjU1OTY0MDY2MTQ1NDU1NDk3NzI5NjMxMTM5MTQ4MDg1ODAzNzEyMTk4Nzk5OTcxNjY0MzgxMjU3NDAyODI5MTExNTA1NzE1MSIgKi8NCiAgICAgICAgMTU3LCAgICAvKiBFb2wgKi8NCiAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5IiwgIC8qICI2ODY0Nzk3NjYwMTMwNjA5NzE0OTgxOTAwNzk5MDgxMzkzMjE3MjY5NDM1MzAwMTQzMzA1NDA5Mzk0NDYzNDU5MTg1NTQzMTgzMzk3NjU1Mzk0MjQ1MDU3NzQ2MzMzMjE3MTk3NTMyOTYzOTk2MzcxMzYzMzIxMTEzODY0NzY4NjEyNDQwMzgwMzQwMzcyODA4ODkyNzA3MDA1NDQ5IiAqLw0KICAgICAgICA1MjEsICAgIC8qIGtleV9sZW4gKi8NCiAgICAgICAgMzIsDQogICAgICAgIDMyLA0KICAgICAgICAzMiwNCiAgICAgICAgQ1VSVkVfR0ZfUA0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBCLTE2MyA6IHleMit4eT14XjMrYXheMitiICovDQogICAgICAgIENVUlZFX0JfMTYzLA0KICAgICAgICA0MSwgICAgIC8qIEVjaGFyICovDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsDQogICAgICAgICIyMGE2MDE5MDdiOGM5NTNjYTE0ODFlYjEwNTEyZjc4NzQ0YTMyMDVmZCIsDQogICAgICAgICIzZjBlYmExNjI4NmEyZDU3ZWEwOTkxMTY4ZDQ5OTQ2MzdlODM0M2UzNiIsDQogICAgICAgICIwZDUxZmJjNmM3MWEwMDk0ZmEyY2RkNTQ1YjExYzVjMGM3OTczMjRmMSIsDQogICAgICAgIDY4LCAgICAgLyogRXBsICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovDQogICAgICAgIDQ5LCAgICAgLyogRW9sICovDQogICAgICAgICI0MDAwMDAwMDAwMDAwMDAwMDAwMDI5MkZFNzdFNzBDMTJBNDIzNEMzMyIsICAgLyogIjU4NDYwMDY1NDkzMjM2MTE2NzI4MTQ3NDI0NDI4NzYzOTA2ODkyNTY4NDMyMDE1ODciICovDQogICAgICAgIDE2MywgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICA3LA0KICAgICAgICA2LA0KICAgICAgICAzLA0KICAgICAgICBDVVJWRV9HRl8yTQ0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBCLTIzMyA6IHleMit4eT14XjMrYXheMitiICovDQogICAgICAgIENVUlZFX0JfMjMzLA0KICAgICAgICA1OSwgICAgIC8qIEVjaGFyIDU5ICovDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsDQogICAgICAgICIwNjY2NDdlZGU2YzMzMmM3ZjhjMDkyM2JiNTgyMTNiMzMzYjIwZTljZTQyODFmZTExNWY3ZDhmOTBhZCIsDQogICAgICAgICIwZmFjOWRmY2JhYzgzMTNiYjIxMzlmMWJiNzU1ZmVmNjViYzM5MWY4YjM2ZjhmOGViNzM3MWZkNTU4YiIsDQogICAgICAgICIxMDA2YTA4YTQxOTAzMzUwNjc4ZTU4NTI4YmViZjhhMGJlZmY4NjdhN2NhMzY3MTZmN2UwMWY4MTA1MiIsDQogICAgICAgIDY4LCAgICAgLyogRXBsICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovDQogICAgICAgIDcwLCAgICAgLyogRW9sICovDQogICAgICAgICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzRTk3NEU3MkY4QTY5MjIwMzFEMjYwM0NGRTBENyIsICAvKiAiNjkwMTc0NjM0Njc5MDU2Mzc4NzQzNDc1NTg2MjI3NzAyNTU1NTgzOTgxMjczNzM0NTAxMzU1NTM3OTM4MzYzNDQ4NTQ2MyIgKi8NCiAgICAgICAgMjMzLCAgICAvKiBrZXlfbGVuICovDQogICAgICAgIDc0LA0KICAgICAgICA3NCwNCiAgICAgICAgNzQsDQogICAgICAgIENVUlZFX0dGXzJNDQogICAgfSwNCiAgICB7DQogICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItMjgzIDogeV4yK3h5PXheMytheF4yK2IgKi8NCiAgICAgICAgQ1VSVkVfQl8yODMsDQogICAgICAgIDcxLCAgICAgLyogRWNoYXIgKi8NCiAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwNCiAgICAgICAgIjI3YjY4MGFjOGI4NTk2ZGE1YTRhZjhhMTlhMDMwM2ZjYTk3ZmQ3NjQ1MzA5ZmEyYTU4MTQ4NWFmNjI2M2UzMTNiNzlhMmY1IiwNCiAgICAgICAgIjVmOTM5MjU4ZGI3ZGQ5MGUxOTM0ZjhjNzBiMGRmZWMyZWVkMjViODU1N2VhYzljODBlMmUxOThmOGNkYmVjZDg2YjEyMDUzIiwNCiAgICAgICAgIjM2NzY4NTRmZTI0MTQxY2I5OGZlNmQ0YjIwZDAyYjQ1MTZmZjcwMjM1MGVkZGIwODI2Nzc5YzgxM2YwZGY0NWJlODExMmY0IiwNCiAgICAgICAgNjgsICAgICAvKiBFcGwgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8NCiAgICAgICAgODUsICAgICAvKiBFb2wgKi8NCiAgICAgICAgIjNGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUY5MDM5OTY2MEZDOTM4QTkwMTY1QjA0MkE3Q0VGQURCMzA3IiwgIC8qICI3NzcwNjc1NTY4OTAyOTE2MjgzNjc3ODQ3NjI3Mjk0MDc1NjI2NTY5NjI1OTI0Mzc2OTA0ODg5MTA5MTk2NTI2NzcwMDQ0Mjc3Nzg3Mzc4NjkyODcxIiAqLw0KICAgICAgICAyODMsICAgIC8qIGtleV9sZW4gKi8NCiAgICAgICAgMTIsDQogICAgICAgIDcsDQogICAgICAgIDUsDQogICAgICAgIENVUlZFX0dGXzJNDQogICAgfSwNCiAgICB7DQogICAgICAgIC8qIE5JU1Q6IEN1cnZlIEItNDA5IDogeV4yK3h5PXheMytheF4yK2IgKi8NCiAgICAgICAgQ1VSVkVfQl80MDksDQogICAgICAgIDEwMywgICAgLyogRWNoYXIgKi8NCiAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMDIxYTVjMmM4ZWU5ZmViNWM0YjlhNzUzYjdiNDc2YjdmZDY0MjJlZjFmM2RkNjc0NzYxZmE5OWQ2YWMyN2M4YTlhMTk3YjI3MjgyMmY2Y2Q1N2E1NWFhNGY1MGFlMzE3YjEzNTQ1ZiIsDQogICAgICAgICIxNWQ0ODYwZDA4OGRkYjM0OTZiMGM2MDY0NzU2MjYwNDQxY2RlNGFmMTc3MWQ0ZGIwMWZmZTViMzRlNTk3MDNkYzI1NWE4NjhhMTE4MDUxNTYwM2FlYWI2MDc5NGU1NGJiNzk5NmE3IiwNCiAgICAgICAgIjA2MWIxY2ZhYjZiZTVmMzJiYmZhNzgzMjRlZDEwNmE3NjM2YjljNWE3YmQxOThkMDE1OGFhNGY1NDg4ZDA4ZjM4NTE0ZjFmZGY0YjRmNDBkMjE4MWIzNjgxYzM2NGJhMDI3M2M3MDYiLA0KICAgICAgICA2OCwgICAgIC8qIEVwbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLw0KICAgICAgICAxMjMsICAgIC8qIEVvbCAqLw0KICAgICAgICAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFMkFBRDZBNjEyRjMzMzA3QkU1RkE0N0MzQzlFMDUyRjgzODE2NENEMzdEOUEyMTE3MyIsICAvKiAiNjYxMDU1OTY4NzkwMjQ4NTk4OTUxOTE1MzA4MDMyNzcxMDM5ODI4NDA0NjgyOTY0MjgxMjE5Mjg0NjQ4Nzk4MzA0MTU3Nzc0ODI3Mzc0ODA1MjA4MTQzNzIzNzYyMTc5MTEwOTY1OTc5ODY3Mjg4MzY2NTY3NTI2NzcxIiAqLw0KICAgICAgICA0MDksICAgIC8qIGtleV9sZW4gKi8NCiAgICAgICAgODcsDQogICAgICAgIDg3LA0KICAgICAgICA4NywNCiAgICAgICAgQ1VSVkVfR0ZfMk0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgLyogTklTVDogQ3VydmUgQi01NzEgOiB5XjIreHk9eF4zK2F4XjIrYiAqLw0KICAgICAgICBDVVJWRV9CXzU3MSwNCiAgICAgICAgMTQzLCAgICAvKiBFY2hhciAqLw0KICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMmY0MGU3ZTIyMjFmMjk1ZGUyOTcxMTdiN2YzZDYyZjVjNmE5N2ZmY2I4Y2VmZjFjZDZiYThjZTRhOWExOGFkODRmZmFiYmQ4ZWZhNTkzMzJiZTdhZDY3NTZhNjZlMjk0YWZkMTg1YTc4ZmYxMmFhNTIwZTRkZTczOWJhY2EwYzdmZmVmZjdmMjk1NTcyN2EiLA0KICAgICAgICAiMzAzMDAxZDM0Yjg1NjI5NmMxNmMwZDQwZDNjZDc3NTBhOTNkMWQyOTU1ZmE4MGFhNWY0MGZjOGRiN2IyYWJkYmRlNTM5NTBmNGMwZDI5M2NkZDcxMWEzNWI2N2ZiMTQ5OWFlNjAwMzg2MTRmMTM5NGFiZmEzYjRjODUwZDkyN2UxZTc3NjljOGVlYzJkMTkiLA0KICAgICAgICAiMzdiZjI3MzQyZGE2MzliNmRjY2ZmZmViNzNkNjlkNzhjNmMyN2E2MDA5Y2JiY2ExOTgwZjg1MzM5MjFlOGE2ODQ0MjNlNDNiYWIwOGE1NzYyOTFhZjhmNDYxYmIyYThiMzUzMWQyZjA0ODVjMTliMTZlMmYxNTE2ZTIzZGQzYzFhNDgyN2FmMWI4YWMxNWIiLA0KICAgICAgICA2OCwgICAgIC8qIEVwbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLw0KICAgICAgICAxNzIsICAgIC8qIEVvbCAqLw0KICAgICAgICAiM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFNjYxQ0UxOEZGNTU5ODczMDgwNTlCMTg2ODIzODUxRUM3REQ5Q0ExMTYxREU5M0Q1MTc0RDY2RTgzODJFOUJCMkZFODRFNDciLCAgLyogIjM4NjQ1Mzc1MjMwMTcyNTgzNDQ2OTUzNTE4OTA5MzE5ODczNDQyOTg5MjczMjk3MDY0MzQ5OTg2NTcyMzUyNTE0NTE1MTkxNDIyODk1NjA0MjQ1MzYxNDM5OTkzODk0MTU3NzMwODMxMzM4ODExMjE5MjY5NDQ0ODYyNDY4NzI0NjI4MTY4MTMwNzAyMzQ1MjgyODgzMDMzMzI0MTEzOTMxOTExMDUyODU3MDMiICovDQogICAgICAgIDU3MSwgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICAxMCwNCiAgICAgICAgNSwNCiAgICAgICAgMiwNCiAgICAgICAgQ1VSVkVfR0ZfMk0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgLyogTklTVDogQ3VydmUgSy0xNjMgOiB5XjIreHk9eF4zK2F4XjIrYiAqLw0KICAgICAgICBDVVJWRV9LXzE2MywNCiAgICAgICAgNDEsICAgICAvKiBFY2hhciAqLw0KICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMmZlMTNjMDUzN2JiYzExYWNhYTA3ZDc5M2RlNGU2ZDVlNWM5NGVlZTgiLA0KICAgICAgICAiMjg5MDcwZmIwNWQzOGZmNTgzMjFmMmU4MDA1MzZkNTM4Y2NkYWEzZDkiLA0KICAgICAgICA2OCwgICAgIC8qIEVwbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLw0KICAgICAgICA0OSwgICAgIC8qIEVvbCAqLw0KICAgICAgICAiNDAwMDAwMDAwMDAwMDAwMDAwMDAyMDEwOEEyRTBDQzBEOTlGOEE1RUYiLCAgLyogIjU4NDYwMDY1NDkzMjM2MTE2NzI4MTQ3NDE3NTM1OTg0NDgzNDgzMjkxMTg1NzQwNjMiICovDQogICAgICAgIDE2MywgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICA3LA0KICAgICAgICA2LA0KICAgICAgICAzLA0KICAgICAgICBDVVJWRV9HRl8yTQ0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTIzMyA6IHleMit4eT14XjMrYXheMitiICovDQogICAgICAgIENVUlZFX0tfMjMzLA0KICAgICAgICA1OSwgICAgIC8qIEVjaGFyIDU5ICovDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsDQogICAgICAgICIxNzIzMmJhODUzYTdlNzMxYWYxMjlmMjJmZjQxNDk1NjNhNDE5YzI2YmY1MGE0YzlkNmVlZmFkNjEyNiIsDQogICAgICAgICIxZGI1MzdkZWNlODE5YjdmNzBmNTU1YTY3YzQyN2E4Y2Q5YmYxOGFlYjliNTZlMGMxMTA1NmZhZTZhMyIsDQogICAgICAgIDY4LCAgICAgLyogRXBsICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8NCiAgICAgICAgNzAsICAgICAvKiBFb2wgKi8NCiAgICAgICAgIjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjlENUJCOTE1QkNENDZFRkIxQUQ1RjE3M0FCREYiLCAgLyogIjM0NTA4NzMxNzMzOTUyODE4OTM3MTczNzc5MzExMzg1MTI3NjA1NzA5NDA5ODg4NjIyNTIxMjYzMjgwODcwMjQ3NDEzNDMiICovDQogICAgICAgIDIzMywgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICA3NCwNCiAgICAgICAgNzQsDQogICAgICAgIDc0LA0KICAgICAgICBDVVJWRV9HRl8yTQ0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTI4MyA6IHleMit4eT14XjMrYXheMitiICovDQogICAgICAgIENVUlZFX0tfMjgzLA0KICAgICAgICA3MSwgICAgIC8qIEVjaGFyICovDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsDQogICAgICAgICI1MDMyMTNmNzhjYTQ0ODgzZjFhM2I4MTYyZjE4OGU1NTNjZDI2NWYyM2MxNTY3YTE2ODc2OTEzYjBjMmFjMjQ1ODQ5MjgzNiIsDQogICAgICAgICIxY2NkYTM4MGYxYzllMzE4ZDkwZjk1ZDA3ZTU0MjZmZTg3ZTQ1YzBlODE4NDY5OGU0NTk2MjM2NGUzNDExNjE3N2RkMjI1OSIsDQogICAgICAgIDY4LCAgICAgLyogRXBsICovDQogICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsICAvKiAiMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM1NTc5MTYyNjAwMjYzMDgxNDM1MTAwNjYyOTg4ODEiICovDQogICAgICAgIDg1LCAgICAgLyogRW9sICovDQogICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU5QUUyRUQwNzU3NzI2NURGRjdGOTQ0NTFFMDYxRTE2M0M2MSIsICAvKiAiMzg4NTMzNzc4NDQ1MTQ1ODE0MTgzODkyMzgxMzY0NzAzNzgxMzI4NDgxMTczMzc5MzA2MTMyNDI5NTg3NDk5NzUyOTgxNTgyOTcwNDQyMjYwMzg3MyIgKi8NCiAgICAgICAgMjgzLCAgICAvKiBrZXlfbGVuICovDQogICAgICAgIDEyLA0KICAgICAgICA3LA0KICAgICAgICA1LA0KICAgICAgICBDVVJWRV9HRl8yTQ0KICAgIH0sDQogICAgew0KICAgICAgICAvKiBOSVNUOiBDdXJ2ZSBLLTQwOSA6IHleMit4eT14XjMrYXheMitiICovDQogICAgICAgIENVUlZFX0tfNDA5LA0KICAgICAgICAxMDMsICAgIC8qIEVjaGFyICovDQogICAgICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwNCiAgICAgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMDYwZjA1ZjY1OGY0OWMxYWQzYWIxODkwZjcxODQyMTBlZmQwOTg3ZTMwN2M4NGMyN2FjY2ZiOGY5ZjY3Y2MyYzQ2MDE4OWViNWFhYWE2MmVlMjIyZWIxYjM1NTQwY2ZlOTAyMzc0NiIsDQogICAgICAgICIxZTM2OTA1MGI3YzRlNDJhY2JhMWRhY2JmMDQyOTljMzQ2MDc4MmY5MThlYTQyN2U2MzI1MTY1ZTllYTEwZTNkYTVmNmM0MmU5YzU1MjE1YWE5Y2EyN2E1ODYzZWM0OGQ4ZTAyODZiIiwNCiAgICAgICAgNjgsICAgICAvKiBFcGwgKi8NCiAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgIC8qICIyNjk1OTk0NjY2NzE1MDYzOTc5NDY2NzAxNTA4NzAxOTYzMDY3MzU1NzkxNjI2MDAyNjMwODE0MzUxMDA2NjI5ODg4MSIgKi8NCiAgICAgICAgMTIzLCAgICAvKiBFb2wgKi8NCiAgICAgICAgIjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU1RjgzQjJENEVBMjA0MDBFQzQ1NTdENUVEM0UzRTdDQTVCNEI1QzgzQjhFMDFFNUZDRiIsICAvKiAiMzMwNTI3OTg0Mzk1MTI0Mjk5NDc1OTU3NjU0MDE2Mzg1NTE5OTE0MjAyMzQxNDgyMTQwNjA5NjQyMzI0Mzk1MDIyODgwNzExMjg5MjQ5MTkxMDUwNjczMjU4NDU3Nzc3NDU4MDE0MDk2MzY2NTkwNjE3NzMxMzU4NjcxIiAqLw0KICAgICAgICA0MDksICAgIC8qIGtleV9sZW4gKi8NCiAgICAgICAgODcsDQogICAgICAgIDg3LA0KICAgICAgICA4NywNCiAgICAgICAgQ1VSVkVfR0ZfMk0NCiAgICB9LA0KICAgIHsNCiAgICAgICAgLyogTklTVDogQ3VydmUgSy01NzEgOiB5XjIreHk9eF4zK2F4XjIrYiAqLw0KICAgICAgICBDVVJWRV9LXzU3MSwNCiAgICAgICAgMTQzLCAgICAvKiBFY2hhciAqLw0KICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLA0KICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLA0KICAgICAgICAiMjZlYjdhODU5OTIzZmJjODIxODk2MzFmODEwM2ZlNGFjOWNhMjk3MDAxMmQ1ZDQ2MDI0ODA0ODAxODQxY2E0NDM3MDk1ODQ5M2IyMDVlNjQ3ZGEzMDRkYjRjZWIwOGNiYmQxYmEzOTQ5NDc3NmZiOTg4YjQ3MTc0ZGNhODhjN2UyOTQ1MjgzYTAxYzg5NzIiLA0KICAgICAgICAiMzQ5ZGM4MDdmNGZiZjM3NGY0YWVhZGUzYmNhOTUzMTRkZDU4Y2VjOWYzMDdhNTRmZmM2MWVmYzAwNmQ4YTJjOWQ0OTc5YzBhYzQ0YWVhNzRmYmViYmI5Zjc3MmFlZGNiNjIwYjAxYTdiYTdhZjFiMzIwNDMwYzg1OTE5ODRmNjAxY2Q0YzE0M2VmMWM3YTMiLA0KICAgICAgICA2OCwgICAgIC8qIEVwbCAqLw0KICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAgLyogIjI2OTU5OTQ2NjY3MTUwNjM5Nzk0NjY3MDE1MDg3MDE5NjMwNjczNTU3OTE2MjYwMDI2MzA4MTQzNTEwMDY2Mjk4ODgxIiAqLw0KICAgICAgICAxNzIsICAgIC8qIEVvbCAqLw0KICAgICAgICAiMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzE4NTBFMUYxOUE2M0U0QjM5MUE4REI5MTdGNDEzOEI2MzBEODRCRTVENjM5MzgxRTkxREVCNDVDRkU3NzhGNjM3QzEwMDEiLCAgLyogIjE5MzIyNjg3NjE1MDg2MjkxNzIzNDc2NzU5NDU0NjU5OTM2NzIxNDk0NjM2NjQ4NTMyMTc0OTkzMjg2MTc2MjU3MjU3NTk1NzExNDQ3ODAyMTIyNjgxMzM5Nzg1MjI3MDY3MTE4MzQ3MDY3MTI4MDA4MjUzNTE0NjEyNzM2NzQ5NzQwNjY2MTczMTE5Mjk2ODI0MjE2MTcwOTI1MDM1NTU3MzM2ODUyNzY2NzMiICovDQogICAgICAgIDU3MSwgICAgLyoga2V5X2xlbiAqLw0KICAgICAgICAxMCwNCiAgICAgICAgNSwNCiAgICAgICAgMiwNCiAgICAgICAgQ1VSVkVfR0ZfMk0NCiAgICB9LA0KfTsNCiNlbmRpZg0KDQoNCnN0YXRpYyBFQ0NfQ1VSVkUgICpwQ3VydmU7DQpzdGF0aWMgRUNDX0NVUlZFICBDdXJ2ZV9Db3B5Ow0KDQpzdGF0aWMgRUNDX0NVUlZFICogZ2V0X2N1cnZlKEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSk7DQpzdGF0aWMgaW50MzJfdCBlY2NfaW5pdF9jdXJ2ZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSk7DQpzdGF0aWMgdm9pZCBydW5fZWNjX2NvZGVjKENSUFRfVCAqY3JwdCwgdWludDMyX3QgbW9kZSk7DQoNCnN0YXRpYyBjaGFyICB0ZW1wX2hleF9zdHJbMTYwXTsNCg0Kdm9sYXRpbGUgdWludDMyX3QgZ19FQ0NfZG9uZSwgZ19FQ0NFUlJfZG9uZTsNCg0Kdm9pZCBFQ0NfRHJpdmVySVNSKENSUFRfVCAqY3JwdCkNCnsNCiAgICBpZihjcnB0LT5JTlRTVFMgJiBDUlBUX0lOVFNUU19FQ0NJRl9Nc2spDQogICAgew0KICAgICAgICBnX0VDQ19kb25lID0gMVVMOw0KICAgICAgICBjcnB0LT5JTlRTVFMgPSBDUlBUX0lOVFNUU19FQ0NJRl9Nc2s7DQogICAgICAgIC8qIHByaW50ZigiRUNDIGRvbmUgSVJRLlxuIik7ICovDQogICAgfQ0KDQogICAgaWYoY3JwdC0+SU5UU1RTICYgQ1JQVF9JTlRTVFNfRUNDRUlGX01zaykNCiAgICB7DQogICAgICAgIGdfRUNDRVJSX2RvbmUgPSAxVUw7DQogICAgICAgIGNycHQtPklOVFNUUyA9IENSUFRfSU5UU1RTX0VDQ0VJRl9Nc2s7DQogICAgICAgIC8qIHByaW50ZigiRUNDRVJSSUYgaXMgc2V0ISFcbiIpOyAqLw0KICAgIH0NCn0NCg0KDQojaWYgRU5BQkxFX0RFQlVHDQpzdGF0aWMgdm9pZCBkdW1wX2VjY19yZWcoY2hhciAqc3RyLCB1aW50MzJfdCB2b2xhdGlsZSByZWdzW10sIGludDMyX3QgY291bnQpDQp7DQogICAgaW50MzJfdCAgaTsNCg0KICAgIHByaW50ZigiJXMgPT4gIiwgc3RyKTsNCiAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KICAgIHsNCiAgICAgICAgcHJpbnRmKCIweCUwOHggIiwgcmVnc1tpXSk7DQogICAgfQ0KICAgIHByaW50ZigiXG4iKTsNCn0NCiNlbHNlDQpzdGF0aWMgdm9pZCBkdW1wX2VjY19yZWcoY2hhciAqc3RyLCB1aW50MzJfdCB2b2xhdGlsZSByZWdzW10sIGludDMyX3QgY291bnQpIHsgfQ0KI2VuZGlmDQpzdGF0aWMgY2hhciAgY2gyaGV4KGNoYXIgY2gpDQp7DQogICAgaWYoY2ggPD0gJzknKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIGNoIC0gJzAnOw0KICAgIH0NCiAgICBlbHNlIGlmKChjaCA8PSAneicpICYmIChjaCA+PSAnYScpKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIGNoIC0gJ2EnICsgMTBVOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICByZXR1cm4gY2ggLSAnQScgKyAxMFU7DQogICAgfQ0KfQ0KDQpzdGF0aWMgdm9pZCBIZXgyUmVnKGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10pDQp7DQogICAgY2hhciAgICAgIGhleDsNCiAgICBpbnQgICAgICAgc2ksIHJpOw0KICAgIHVpbnQzMl90ICBpLCB2YWwzMjsNCg0KICAgIHNpID0gKGludClzdHJsZW4oaW5wdXQpIC0gMTsNCiAgICByaSA9IDA7DQoNCiAgICB3aGlsZShzaSA+PSAwKQ0KICAgIHsNCiAgICAgICAgdmFsMzIgPSAwVUw7DQogICAgICAgIGZvcihpID0gMFVMOyAoaSA8IDhVTCkgJiYgKHNpID49IDApOyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGhleCA9IGNoMmhleChpbnB1dFtzaV0pOw0KICAgICAgICAgICAgdmFsMzIgfD0gKHVpbnQzMl90KWhleCA8PCAoaSAqIDRVTCk7DQogICAgICAgICAgICBzaS0tOw0KICAgICAgICB9DQogICAgICAgIHJlZ1tyaSsrXSA9IHZhbDMyOw0KICAgIH0NCn0NCg0Kc3RhdGljIHZvaWQgSGV4MlJlZ0V4KGNoYXIgaW5wdXRbXSwgdWludDMyX3Qgdm9sYXRpbGUgcmVnW10sIGludCBzaGlmdCkNCnsNCiAgICB1aW50MzJfdCAgaGV4LCBjYXJyeTsNCiAgICBpbnQgICAgICAgc2ksIHJpOw0KICAgIHVpbnQzMl90ICBpLCB2YWwzMjsNCg0KICAgIHNpID0gKGludClzdHJsZW4oaW5wdXQpIC0gMTsNCiAgICByaSA9IDA7DQogICAgY2FycnkgPSAwVTsNCiAgICB3aGlsZShzaSA+PSAwKQ0KICAgIHsNCiAgICAgICAgdmFsMzIgPSAwVUw7DQogICAgICAgIGZvcihpID0gMFVMOyAoaSA8IDhVTCkgJiYgKHNpID49IDApOyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGhleCA9ICh1aW50MzJfdCljaDJoZXgoaW5wdXRbc2ldKTsNCiAgICAgICAgICAgIGhleCA8PD0gc2hpZnQ7DQoNCiAgICAgICAgICAgIHZhbDMyIHw9ICh1aW50MzJfdCkoKGhleCAmIDB4RlUpIHwgY2FycnkpIDw8IChpICogNFVMKTsNCiAgICAgICAgICAgIGNhcnJ5ID0gKGhleCA+PiA0KSAmIDB4RlU7DQogICAgICAgICAgICBzaS0tOw0KICAgICAgICB9DQogICAgICAgIHJlZ1tyaSsrXSA9IHZhbDMyOw0KICAgIH0NCiAgICBpZihjYXJyeSAhPSAwVSkNCiAgICB7DQogICAgICAgIHJlZ1tyaV0gPSBjYXJyeTsNCiAgICB9DQp9DQoNCi8qKg0KICAqIEBicmllZiAgRXh0cmFjdCBzcGVjaWZpZWQgbmliYmxlIGZyb20gYW4gdW5zaWduZWQgd29yZCBpbiBjaGFyYWN0ZXIgZm9ybWF0Lg0KICAqICAgICAgICAgRm9yIGV4YW1wbGU6DQogICogICAgICAgICAgICAgICAgU3VwcG9zZSB2YWwzMiBpcyAweDc4NjU0MzIxMCwgZ2V0X050aF9uaWJibGVfY2hhcih2YWwzMiwgMykgd2lsbCByZXR1cm4gYSAnMycuDQogICogQHBhcmFtW2luXSAgdmFsMzIgICBUaGUgaW5wdXQgdW5zaWduZWQgd29yZA0KICAqIEBwYXJhbVtpbl0gIGlkeCAgICAgVGhlIE50aCBuaWJibGUgdG8gYmUgZXh0cmFjdGVkLg0KICAqIEByZXR1cm4gIFRoZSBuaWJibGUgaW4gY2hhcmFjdGVyIGZvcm1hdC4NCiAgKi8NCnN0YXRpYyBjaGFyIGdldF9OdGhfbmliYmxlX2NoYXIodWludDMyX3QgdmFsMzIsIHVpbnQzMl90IGlkeCkNCnsNCiAgICByZXR1cm4gaGV4X2NoYXJfdGJsWyh2YWwzMiA+PiAoaWR4ICogNFUpKSAmIDB4ZlUgXTsNCn0NCg0KDQpzdGF0aWMgdm9pZCBSZWcySGV4KGludDMyX3QgY291bnQsIHVpbnQzMl90IHZvbGF0aWxlIHJlZ1tdLCBjaGFyIG91dHB1dFtdKQ0Kew0KICAgIGludDMyX3QgICAgaWR4LCByaTsNCiAgICB1aW50MzJfdCAgIGk7DQoNCiAgICBvdXRwdXRbY291bnRdID0gMFU7DQogICAgaWR4ID0gY291bnQgLSAxOw0KDQogICAgZm9yKHJpID0gMDsgaWR4ID49IDA7IHJpKyspDQogICAgew0KICAgICAgICBmb3IoaSA9IDBVTDsgKGkgPCA4VUwpICYmIChpZHggPj0gMCk7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgb3V0cHV0W2lkeF0gPSBnZXRfTnRoX25pYmJsZV9jaGFyKHJlZ1tyaV0sIGkpOw0KICAgICAgICAgICAgaWR4LS07DQogICAgICAgIH0NCiAgICB9DQp9DQoNCnN0YXRpYyBpbnQzMl90IGVjY19pbml0X2N1cnZlKENSUFRfVCAqY3JwdCwgRV9FQ0NfQ1VSVkUgZWNjX2N1cnZlKQ0Kew0KICAgIGludDMyX3QgIGksIHJldCA9IDA7DQoNCiAgICBwQ3VydmUgPSBnZXRfY3VydmUoZWNjX2N1cnZlKTsNCiAgICBpZihwQ3VydmUgPT0gTlVMTCkNCiAgICB7DQogICAgICAgIENSUFRfREJHTVNHKCJDYW5ub3QgZmluZCBjdXJ2ZSAlZCEhXG4iLCBlY2NfY3VydmUpOw0KICAgICAgICByZXQgPSAtMTsNCiAgICB9DQoNCiAgICBpZihyZXQgPT0gMCkNCiAgICB7DQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19BW2ldID0gMFVMOw0KICAgICAgICAgICAgY3JwdC0+RUNDX0JbaV0gPSAwVUw7DQogICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSAwVUw7DQogICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSAwVUw7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsNCiAgICAgICAgfQ0KDQogICAgICAgIEhleDJSZWcocEN1cnZlLT5FYSwgY3JwdC0+RUNDX0EpOw0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RWIsIGNycHQtPkVDQ19CKTsNCiAgICAgICAgSGV4MlJlZyhwQ3VydmUtPlB4LCBjcnB0LT5FQ0NfWDEpOw0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+UHksIGNycHQtPkVDQ19ZMSk7DQoNCiAgICAgICAgQ1JQVF9EQkdNU0coIktleSBsZW5ndGggPSAlZFxuIiwgcEN1cnZlLT5rZXlfbGVuKTsNCiAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9BIiwgY3JwdC0+RUNDX0EsIDEwKTsNCiAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9CIiwgY3JwdC0+RUNDX0IsIDEwKTsNCiAgICAgICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19QT0lOVF9YMSIsIGNycHQtPkVDQ19YMSwgMTApOw0KICAgICAgICBkdW1wX2VjY19yZWcoIkNSUFRfRUNDX1BPSU5UX1kxIiwgY3JwdC0+RUNDX1kxLCAxMCk7DQoNCiAgICAgICAgaWYocEN1cnZlLT5HRiA9PSAoaW50KUNVUlZFX0dGXzJNKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTlswXSA9IDB4MVVMOw0KICAgICAgICAgICAgY3JwdC0+RUNDX05bKHBDdXJ2ZS0+a2V5X2xlbikgLyAzMl0gfD0gKDFVTCA8PCAoKHBDdXJ2ZS0+a2V5X2xlbikgJSAzMikpOw0KICAgICAgICAgICAgY3JwdC0+RUNDX05bKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazEpIC8gMzJdIHw9ICgxVUwgPDwgKChwQ3VydmUtPmlycmVkdWNpYmxlX2sxKSAlIDMyKSk7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTlsocEN1cnZlLT5pcnJlZHVjaWJsZV9rMikgLyAzMl0gfD0gKDFVTCA8PCAoKHBDdXJ2ZS0+aXJyZWR1Y2libGVfazIpICUgMzIpKTsNCiAgICAgICAgICAgIGNycHQtPkVDQ19OWyhwQ3VydmUtPmlycmVkdWNpYmxlX2szKSAvIDMyXSB8PSAoMVVMIDw8ICgocEN1cnZlLT5pcnJlZHVjaWJsZV9rMykgJSAzMikpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgSGV4MlJlZyhwQ3VydmUtPlBwLCBjcnB0LT5FQ0NfTik7DQogICAgICAgIH0NCiAgICB9DQogICAgZHVtcF9lY2NfcmVnKCJDUlBUX0VDQ19DVVJWRV9OIiwgY3JwdC0+RUNDX04sIDEwKTsNCiAgICByZXR1cm4gcmV0Ow0KfQ0KDQoNCnN0YXRpYyBpbnQgIGdldF9uaWJibGVfdmFsdWUoY2hhciBjKQ0Kew0KICAgIGNoYXIgY2g7DQoNCiAgICBpZigoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpDQogICAgew0KICAgICAgICBjaCA9ICcwJzsNCiAgICAgICAgcmV0dXJuICgoaW50KWMgLSAoaW50KWNoKTsNCiAgICB9DQoNCiAgICBpZigoYyA+PSAnYScpICYmIChjIDw9ICdmJykpDQogICAgew0KICAgICAgICBjaCA9ICdhJzsNCiAgICAgICAgcmV0dXJuICgoaW50KWMgLSAoaW50KWNoICsgMTApOw0KICAgIH0NCg0KICAgIGlmKChjID49ICdBJykgJiYgKGMgPD0gJ0YnKSkNCiAgICB7DQogICAgICAgIGNoID0gJ0EnOw0KICAgICAgICByZXR1cm4gKChpbnQpYyAtIChpbnQpY2ggKyAxMCk7DQogICAgfQ0KICAgIHJldHVybiAwOw0KfQ0KDQoNCi8qKg0KICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIHByaXZhdGUga2V5IGlzIGxvY2F0ZWQgaW4gdmFsaWQgcmFuZ2Ugb2YgY3VydmUuDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLg0KICAqIEBwYXJhbVtpbl0gIHByaXZhdGVfayAgIFRoZSBpbnB1dCBwcml2YXRlIGtleS4NCiAgKiBAcmV0dXJuICAxICAgIElzIHZhbGlkLg0KICAqIEByZXR1cm4gIDAgICAgSXMgbm90IHZhbGlkLg0KICAqIEByZXR1cm4gIC0xICAgSW52YWxpZCBjdXJ2ZS4NCiAgKi8NCmludCBFQ0NfSXNQcml2YXRlS2V5VmFsaWQoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsICBjaGFyIHByaXZhdGVfa1tdKQ0Kew0KICAgIHVpbnQzMl90ICBpOw0KDQoNCiAgICBwQ3VydmUgPSBnZXRfY3VydmUoZWNjX2N1cnZlKTsNCiAgICBpZihwQ3VydmUgPT0gTlVMTCkNCiAgICB7DQogICAgICAgIHJldHVybiAtMTsNCiAgICB9DQoNCiAgICBpZihzdHJsZW4ocHJpdmF0ZV9rKSA8IHN0cmxlbihwQ3VydmUtPkVvcmRlcikpDQogICAgew0KICAgICAgICByZXR1cm4gMTsNCiAgICB9DQoNCiAgICBpZihzdHJsZW4ocHJpdmF0ZV9rKSA+IHN0cmxlbihwQ3VydmUtPkVvcmRlcikpDQogICAgew0KICAgICAgICByZXR1cm4gMDsNCiAgICB9DQoNCiAgICBmb3IoaSA9IDBVOyBpIDwgc3RybGVuKHByaXZhdGVfayk7IGkrKykNCiAgICB7DQogICAgICAgIGlmKGdldF9uaWJibGVfdmFsdWUocHJpdmF0ZV9rW2ldKSA8IGdldF9uaWJibGVfdmFsdWUocEN1cnZlLT5Fb3JkZXJbaV0pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKGdldF9uaWJibGVfdmFsdWUocHJpdmF0ZV9rW2ldKSA+IGdldF9uaWJibGVfdmFsdWUocEN1cnZlLT5Fb3JkZXJbaV0pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gMDsNCn0NCg0KDQovKioNCiAgKiBAYnJpZWYgIEdpdmVuIGEgcHJpdmF0ZSBrZXkgYW5kIGN1cnZlIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMga2V5IHBhaXIuDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICBwcml2YXRlX2sgICBUaGUgaW5wdXQgcHJpdmF0ZSBrZXkuDQogICogQHBhcmFtW2luXSAgZWNjX2N1cnZlICAgVGhlIHByZS1kZWZpbmVkIEVDQyBjdXJ2ZS4NCiAgKiBAcGFyYW1bb3V0XSBwdWJsaWNfazEgICBUaGUgb3V0cHV0IHB1YmxpY2sga2V5IDEuDQogICogQHBhcmFtW291dF0gcHVibGljX2syICAgVGhlIG91dHB1dCBwdWJsaWNrIGtleSAyLg0KICAqIEByZXR1cm4gIDAgICAgU3VjY2Vzcy4NCiAgKiBAcmV0dXJuICAtMSAgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuDQogICovDQppbnQzMl90ICBFQ0NfR2VuZXJhdGVQdWJsaWNLZXkoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKnByaXZhdGVfaywgY2hhciBwdWJsaWNfazFbXSwgY2hhciBwdWJsaWNfazJbXSkNCnsNCiAgICBpbnQzMl90ICByZXQgPSAwLCBpOw0KICAgIHVpbnQzMl90IHUzMlRtcDsNCg0KICAgIGlmKGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSkgIT0gMCkNCiAgICB7DQogICAgICAgIHJldCA9IC0xOw0KICAgIH0NCg0KICAgIGlmKHJldCA9PSAwKQ0KICAgIHsNCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX0tbaV0gPSAwVUw7DQogICAgICAgIH0NCg0KICAgICAgICBIZXgyUmVnKHByaXZhdGVfaywgY3JwdC0+RUNDX0spOw0KDQogICAgICAgIC8qIHNldCBGU0VMIChGaWVsZCBzZWxlY3Rpb24pICovDQogICAgICAgIGlmKHBDdXJ2ZS0+R0YgPT0gKGludClDVVJWRV9HRl8yTSkNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlICAgICAgICAgICAvKiAgQ1VSVkVfR0ZfUCAqLw0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gQ1JQVF9FQ0NfQ1RMX0ZTRUxfTXNrOw0KICAgICAgICB9DQoNCiAgICAgICAgZ19FQ0NfZG9uZSA9IGdfRUNDRVJSX2RvbmUgPSAwVUw7DQogICAgICAgIGNycHQtPkVDQ19DVEwgfD0gKCh1aW50MzJfdClwQ3VydmUtPmtleV9sZW4gPDwgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Qb3MpIHwNCiAgICAgICAgICAgICAgICAgICAgICAgICBFQ0NPUF9QT0lOVF9NVUwgfCBDUlBUX0VDQ19DVExfU1RBUlRfTXNrOw0KDQogICAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICAgIHUzMlRtcCA9IGdfRUNDX2RvbmU7DQogICAgICAgICAgICB1MzJUbXAgfD0gZ19FQ0NFUlJfZG9uZTsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSh1MzJUbXAgPT0gMFVMKTsNCg0KICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIGNycHQtPkVDQ19YMSwgcHVibGljX2sxKTsNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWTEsIHB1YmxpY19rMik7DQogICAgfQ0KDQogICAgcmV0dXJuIHJldDsNCn0NCg0KDQovKioNCiAgKiBAYnJpZWYgIEdpdmVuIGEgY3VydmUgcGFyYW1ldGVyLCB0aGUgb3RoZXIgcGFydHkncyBwdWJsaWMga2V5LCBhbmQgb25lJ3Mgb3duIHByaXZhdGUga2V5IHRvIGdlbmVyYXRlIHRoZSBzZWNyZXQgWi4NCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuDQogICogQHBhcmFtW2luXSAgcHJpdmF0ZV9rICAgT25lJ3Mgb3duIHByaXZhdGUga2V5Lg0KICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMSAgIFRoZSBvdGhlciBwYXJ0eSdzIHB1YmxpY2sga2V5IDEuDQogICogQHBhcmFtW2luXSAgcHVibGljX2syICAgVGhlIG90aGVyIHBhcnR5J3MgcHVibGljayBrZXkgMi4NCiAgKiBAcGFyYW1bb3V0XSBzZWNyZXRfeiAgICBUaGUgRUNDIENESCBzZWNyZXQgWi4NCiAgKiBAcmV0dXJuICAwICAgIFN1Y2Nlc3MuDQogICogQHJldHVybiAgLTEgICAiZWNjX2N1cnZlIiB2YWx1ZSBpcyBpbnZhbGlkLg0KICAqLw0KaW50MzJfdCAgRUNDX0dlbmVyYXRlU2VjcmV0WihDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqcHJpdmF0ZV9rLCBjaGFyIHB1YmxpY19rMVtdLCBjaGFyIHB1YmxpY19rMltdLCBjaGFyIHNlY3JldF96W10pDQp7DQogICAgaW50MzJfdCAgaSwgcmV0ID0gMDsNCiAgICB1aW50MzJfdCB1MzJUbXA7DQoNCiAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApDQogICAgew0KICAgICAgICByZXQgPSAtMTsNCiAgICB9DQoNCiAgICBpZihyZXQgPT0gMCkNCiAgICB7DQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gMFVMOw0KICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gMFVMOw0KICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzE2MykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzIzMykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9CXzI4MykgfHwNCiAgICAgICAgICAgICAgICAoZWNjX2N1cnZlID09IENVUlZFX0JfNDA5KSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0JfNTcxKSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0tfMTYzKSkNCiAgICAgICAgew0KICAgICAgICAgICAgSGV4MlJlZ0V4KHByaXZhdGVfaywgY3JwdC0+RUNDX0ssIDEpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYoKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzIzMykgfHwgKGVjY19jdXJ2ZSA9PSBDVVJWRV9LXzI4MykgfHwNCiAgICAgICAgICAgICAgICAoZWNjX2N1cnZlID09IENVUlZFX0tfNDA5KSB8fCAoZWNjX2N1cnZlID09IENVUlZFX0tfNTcxKSkNCiAgICAgICAgew0KICAgICAgICAgICAgSGV4MlJlZ0V4KHByaXZhdGVfaywgY3JwdC0+RUNDX0ssIDIpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgSGV4MlJlZyhwcml2YXRlX2ssIGNycHQtPkVDQ19LKTsNCiAgICAgICAgfQ0KDQogICAgICAgIEhleDJSZWcocHVibGljX2sxLCBjcnB0LT5FQ0NfWDEpOw0KICAgICAgICBIZXgyUmVnKHB1YmxpY19rMiwgY3JwdC0+RUNDX1kxKTsNCg0KICAgICAgICAvKiBzZXQgRlNFTCAoRmllbGQgc2VsZWN0aW9uKSAqLw0KICAgICAgICBpZihwQ3VydmUtPkdGID09IChpbnQpQ1VSVkVfR0ZfMk0pDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19DVEwgPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSAgICAgICAgICAgLyogIENVUlZFX0dGX1AgKi8NCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsNCiAgICAgICAgfQ0KICAgICAgICBnX0VDQ19kb25lID0gZ19FQ0NFUlJfZG9uZSA9IDBVTDsNCiAgICAgICAgY3JwdC0+RUNDX0NUTCB8PSAoKHVpbnQzMl90KXBDdXJ2ZS0+a2V5X2xlbiA8PCBDUlBUX0VDQ19DVExfQ1VSVkVNX1BvcykgfA0KICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ09QX1BPSU5UX01VTCB8IENSUFRfRUNDX0NUTF9TVEFSVF9Nc2s7DQoNCiAgICAgICAgZG8NCiAgICAgICAgew0KICAgICAgICAgICAgdTMyVG1wID0gZ19FQ0NfZG9uZTsNCiAgICAgICAgICAgIHUzMlRtcCB8PSBnX0VDQ0VSUl9kb25lOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlKHUzMlRtcCA9PSAwVUwpOw0KDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCBzZWNyZXRfeik7DQogICAgfQ0KDQogICAgcmV0dXJuIHJldDsNCn0NCg0Kc3RhdGljIHZvaWQgcnVuX2VjY19jb2RlYyhDUlBUX1QgKmNycHQsIHVpbnQzMl90IG1vZGUpDQp7DQogICAgdWludDMyX3QgdTMyVG1wOw0KDQogICAgaWYoKG1vZGUgJiBDUlBUX0VDQ19DVExfRUNDT1BfTXNrKSA9PSBFQ0NPUF9NT0RVTEUpDQogICAgew0KICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gQ1JQVF9FQ0NfQ1RMX0ZTRUxfTXNrOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZihwQ3VydmUtPkdGID09IChpbnQpQ1VSVkVfR0ZfMk0pDQogICAgICAgIHsNCiAgICAgICAgICAgIC8qIHBvaW50ICovDQogICAgICAgICAgICBjcnB0LT5FQ0NfQ1RMID0gMFVMOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgLyogQ1VSVkVfR0ZfUCAqLw0KICAgICAgICAgICAgY3JwdC0+RUNDX0NUTCA9IENSUFRfRUNDX0NUTF9GU0VMX01zazsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGdfRUNDX2RvbmUgPSBnX0VDQ0VSUl9kb25lID0gMFVMOw0KICAgIGNycHQtPkVDQ19DVEwgfD0gKCh1aW50MzJfdClwQ3VydmUtPmtleV9sZW4gPDwgQ1JQVF9FQ0NfQ1RMX0NVUlZFTV9Qb3MpIHwgbW9kZSB8IENSUFRfRUNDX0NUTF9TVEFSVF9Nc2s7DQoNCiAgICBkbw0KICAgIHsNCiAgICAgICAgdTMyVG1wID0gZ19FQ0NfZG9uZTsNCiAgICAgICAgdTMyVG1wIHw9IGdfRUNDRVJSX2RvbmU7DQogICAgfQ0KICAgIHdoaWxlKHUzMlRtcCA9PSAwVUwpOw0KDQogICAgd2hpbGUoY3JwdC0+RUNDX1NUUyAmIENSUFRfRUNDX1NUU19CVVNZX01zaykgeyB9DQp9DQoNCi8qKg0KICAqIEBicmllZiAgRUNEU0EgZGlnaXRhbCBzaWduYXR1cmUgZ2VuZXJhdGlvbi4NCiAgKiBAcGFyYW1baW5dICBjcnB0ICAgICAgICBUaGUgcG9pbnRlciBvZiBDUllQVE8gbW9kdWxlIA0KICAqIEBwYXJhbVtpbl0gIGVjY19jdXJ2ZSAgIFRoZSBwcmUtZGVmaW5lZCBFQ0MgY3VydmUuDQogICogQHBhcmFtW2luXSAgbWVzc2FnZSAgICAgVGhlIGhhc2ggdmFsdWUgb2Ygc291cmNlIGNvbnRleHQuDQogICogQHBhcmFtW2luXSAgZCAgICAgICAgICAgVGhlIHByaXZhdGUga2V5Lg0KICAqIEBwYXJhbVtpbl0gIGsgICAgICAgICAgIFRoZSBzZWxlY3RlZCByYW5kb20gaW50ZWdlci4NCiAgKiBAcGFyYW1bb3V0XSBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlDQogICogQHBhcmFtW291dF0gUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQ0KICAqIEByZXR1cm4gIDAgICAgU3VjY2Vzcy4NCiAgKiBAcmV0dXJuICAtMSAgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuDQogICovDQppbnQzMl90ICBFQ0NfR2VuZXJhdGVTaWduYXR1cmUoQ1JQVF9UICpjcnB0LCBFX0VDQ19DVVJWRSBlY2NfY3VydmUsIGNoYXIgKm1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCwgY2hhciAqaywgY2hhciAqUiwgY2hhciAqUykNCnsNCiAgICB1aW50MzJfdCB2b2xhdGlsZSB0ZW1wX3Jlc3VsdDFbMThdLCB0ZW1wX3Jlc3VsdDJbMThdOw0KICAgIGludDMyX3QgIGksIHJldCA9IDA7DQoNCiAgICBpZihlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpICE9IDApDQogICAgew0KICAgICAgICByZXQgPSAtMTsNCiAgICB9DQoNCiAgICBpZihyZXQgPT0gMCkNCiAgICB7DQoNCiAgICAgICAgLyoNCiAgICAgICAgICogICAxLiBDYWxjdWxhdGUgZSA9IEhBU0gobSksIHdoZXJlIEhBU0ggaXMgYSBjcnlwdG9ncmFwaGljIGhhc2hpbmcgYWxnb3JpdGhtLCAoaS5lLiBTSEEtMSkNCiAgICAgICAgICogICAgICAoMSkgVXNlIFNIQSB0byBjYWxjdWxhdGUgZQ0KICAgICAgICAgKi8NCg0KICAgICAgICAvKiAgIDIuIFNlbGVjdCBhIHJhbmRvbSBpbnRlZ2VyIGsgZm9ybSBbMSwgbi0xXQ0KICAgICAgICAgKiAgICAgICgxKSBOb3RpY2UgdGhhdCBuIGlzIG9yZGVyLCBub3QgcHJpbWUgbW9kdWx1cyBvciBpcnJlZHVjaWJsZSBwb2x5bm9taWFsIGZ1bmN0aW9uDQogICAgICAgICAqLw0KDQogICAgICAgIC8qDQogICAgICAgICAqICAgMy4gQ29tcHV0ZSByID0geDEgKG1vZCBuKSwgd2hlcmUgKHgxLCB5MSkgPSBrICogRy4gSWYgciA9IDAsIGdvIHRvIHN0ZXAgMg0KICAgICAgICAgKiAgICAgICgxKSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycw0KICAgICAgICAgKiAgICAgICgyKSBXcml0ZSB0aGUgcHJpbWUgbW9kdWx1cyBvciBpcnJlZHVjaWJsZSBwb2x5bm9taWFsIGZ1bmN0aW9uIHRvIE4gcmVnaXN0ZXJzIGFjY29yZGluZw0KICAgICAgICAgKiAgICAgICgzKSBXcml0ZSB0aGUgcG9pbnQgRyh4LCB5KSB0byBYMSwgWTEgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDQpIFdyaXRlIHRoZSByYW5kb20gaW50ZWdlciBrIHRvIEsgcmVnaXN0ZXINCiAgICAgICAgICogICAgICAoNSkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDANCiAgICAgICAgICogICAgICAoNikgU2V0IEZTRUwoQ1JQVF9FQ0NfQ1RMWzhdKSBhY2NvcmRpbmcgdG8gdXNlZCBjdXJ2ZSBvZiBwcmltZSBmaWVsZCBvciBiaW5hcnkgZmllbGQNCiAgICAgICAgICogICAgICAoNykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQ0KICAgICAgICAgKiAgICAgICg4KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZA0KICAgICAgICAgKiAgICAgICg5KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyBhY2NvcmRpbmcNCiAgICAgICAgICogICAgICAoMTApIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMTEpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDEyKSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMTANCiAgICAgICAgICogICAgICAoMTMpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDEgICAgICAgICAqDQogICAgICAgICAqICAgICAgKDE0KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZA0KICAgICAgICAgKiAgICAgICgxNSkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHINCiAgICAgICAgICovDQoNCiAgICAgICAgLyogMy0oNCkgV3JpdGUgdGhlIHJhbmRvbSBpbnRlZ2VyIGsgdG8gSyByZWdpc3RlciAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfS1tpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKGssIGNycHQtPkVDQ19LKTsNCg0KICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX1BPSU5UX01VTCk7DQoNCiAgICAgICAgLyogIDMtKDkpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7DQoNCiAgICAgICAgLyogMy0oMTApIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOw0KICAgICAgICB9DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9BREQpOw0KDQogICAgICAgIC8qIDMtKDE1KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgciAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICB0ZW1wX3Jlc3VsdDFbaV0gPSBjcnB0LT5FQ0NfWDFbaV07DQogICAgICAgIH0NCg0KICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MSwgUik7DQoNCiAgICAgICAgLyoNCiAgICAgICAgICogICA0LiBDb21wdXRlIHMgPSBrID8gMSCh0SAoZSArIGQgodEgcikobW9kIG4pLiBJZiBzID0gMCwgZ28gdG8gc3RlcCAyDQogICAgICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycyBhY2NvcmRpbmcNCiAgICAgICAgICogICAgICAoMikgV3JpdGUgMHgxIHRvIFkxIHJlZ2lzdGVycw0KICAgICAgICAgKiAgICAgICgzKSBXcml0ZSB0aGUgcmFuZG9tIGludGVnZXIgayB0byBYMSByZWdpc3RlcnMgYWNjb3JkaW5nDQogICAgICAgICAqICAgICAgKDQpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDUpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMA0KICAgICAgICAgKiAgICAgICg2KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxDQogICAgICAgICAqICAgICAgKDcpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkDQogICAgICAgICAqICAgICAgKDgpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCBrXi0xDQogICAgICAgICAqICAgICAgKDkpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDEwKSBXcml0ZSByLCBkIHRvIFgxLCBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMTEpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDEyKSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMDENCiAgICAgICAgICogICAgICAoMTMpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDENCiAgICAgICAgICogICAgICAoMTQpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkDQogICAgICAgICAqICAgICAgKDE1KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMTYpIFdyaXRlIGUgdG8gWTEgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDE3KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQ0KICAgICAgICAgKiAgICAgICgxOCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDEwDQogICAgICAgICAqICAgICAgKDE5KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxDQogICAgICAgICAqICAgICAgKDIwKSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZA0KICAgICAgICAgKiAgICAgICgyMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMjIpIFdyaXRlIGteLTEgdG8gWTEgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDIzKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMQ0KICAgICAgICAgKiAgICAgICgyNCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDI1KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxDQogICAgICAgICAqICAgICAgKDI2KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZA0KICAgICAgICAgKiAgICAgICgyNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHMNCiAgICAgICAgICovDQoNCiAgICAgICAgLyogUy9XOiBHRnBfYWRkX21vZF9vcmRlcihwQ3VydmUtPmtleV9sZW4rMiwgMCwgeDEsIGEsIFIpOyAqLw0KDQogICAgICAgIC8qICA0LSgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOw0KDQogICAgICAgIC8qICA0LSgyKSBXcml0ZSAweDEgdG8gWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBjcnB0LT5FQ0NfWTFbMF0gPSAweDFVTDsNCg0KICAgICAgICAvKiAgNC0oMykgV3JpdGUgdGhlIHJhbmRvbSBpbnRlZ2VyIGsgdG8gWDEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKGssIGNycHQtPkVDQ19YMSk7DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9ESVYpOw0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiKDcpIG91dHB1dCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOw0KI2VuZGlmDQoNCiAgICAgICAgLyogIDQtKDgpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCBrXi0xICovDQoNCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgdGVtcF9yZXN1bHQyW2ldID0gY3JwdC0+RUNDX1gxW2ldOw0KICAgICAgICB9DQoNCiNpZiBFTkFCTEVfREVCVUcNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDIsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCJrXi0xID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7DQojZW5kaWYNCg0KICAgICAgICAvKiAgNC0oOSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOw0KDQogICAgICAgIC8qICA0LSgxMCkgV3JpdGUgciwgZCB0byBYMSwgWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IHRlbXBfcmVzdWx0MVtpXTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKGQsIGNycHQtPkVDQ19ZMSk7DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9NVUwpOw0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiKDE0KSBvdXRwdXQgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiNlbmRpZg0KDQogICAgICAgIC8qICA0LSgxNSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIHRvIE4gcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19OW2ldID0gMFVMOw0KICAgICAgICB9DQogICAgICAgIEhleDJSZWcocEN1cnZlLT5Fb3JkZXIsIGNycHQtPkVDQ19OKTsNCg0KICAgICAgICAvKiAgNC0oMTYpIFdyaXRlIGUgdG8gWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KDQogICAgICAgIEhleDJSZWcobWVzc2FnZSwgY3JwdC0+RUNDX1kxKTsNCg0KICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0FERCk7DQoNCiNpZiBFTkFCTEVfREVCVUcNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCIoMjApIG91dHB1dCA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOw0KI2VuZGlmDQoNCiAgICAgICAgLyogIDQtKDIxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7DQoNCiAgICAgICAgLyogIDQtKDIyKSBXcml0ZSBrXi0xIHRvIFkxIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfWTFbaV0gPSB0ZW1wX3Jlc3VsdDJbaV07DQogICAgICAgIH0NCg0KICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX01VTCk7DQoNCiAgICAgICAgLyogIDQtKDI3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgcyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICB0ZW1wX3Jlc3VsdDJbaV0gPSBjcnB0LT5FQ0NfWDFbaV07DQogICAgICAgIH0NCg0KICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgUyk7DQoNCiAgICB9ICAvKiByZXQgPT0gMCAqLw0KDQogICAgcmV0dXJuIHJldDsNCn0NCg0KLyoqDQogICogQGJyaWVmICBFQ0RTQSBkb2dvdGFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uDQogICogQHBhcmFtW2luXSAgY3JwdCAgICAgICAgVGhlIHBvaW50ZXIgb2YgQ1JZUFRPIG1vZHVsZSANCiAgKiBAcGFyYW1baW5dICBlY2NfY3VydmUgICBUaGUgcHJlLWRlZmluZWQgRUNDIGN1cnZlLg0KICAqIEBwYXJhbVtpbl0gIG1lc3NhZ2UgICAgIFRoZSBoYXNoIHZhbHVlIG9mIHNvdXJjZSBjb250ZXh0Lg0KICAqIEBwYXJhbVtpbl0gIHB1YmxpY19rMSAgIFRoZSBwdWJsaWMga2V5IDEuDQogICogQHBhcmFtW2luXSAgcHVibGljX2syICAgVGhlIHB1YmxpYyBrZXkgMi4NCiAgKiBAcGFyYW1baW5dICBSICAgICAgICAgICBSIG9mIHRoZSAoUixTKSBwYWlyIGRpZ2l0YWwgc2lnbmF0dXJlDQogICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgUyBvZiB0aGUgKFIsUykgcGFpciBkaWdpdGFsIHNpZ25hdHVyZQ0KICAqIEByZXR1cm4gIDAgICAgU3VjY2Vzcy4NCiAgKiBAcmV0dXJuICAtMSAgICJlY2NfY3VydmUiIHZhbHVlIGlzIGludmFsaWQuDQogICogQHJldHVybiAgLTIgICBWZXJpZmljYXRpb24gZmFpbGVkLg0KICAqLw0KaW50MzJfdCAgRUNDX1ZlcmlmeVNpZ25hdHVyZShDUlBUX1QgKmNycHQsIEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSwgY2hhciAqbWVzc2FnZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHVibGljX2sxLCBjaGFyICpwdWJsaWNfazIsIGNoYXIgKlIsIGNoYXIgKlMpDQp7DQogICAgdWludDMyX3QgIHRlbXBfcmVzdWx0MVsxOF0sIHRlbXBfcmVzdWx0MlsxOF07DQogICAgdWludDMyX3QgIHRlbXBfeFsxOF0sIHRlbXBfeVsxOF07DQogICAgaW50MzJfdCAgIGksIHJldCA9IDA7DQoNCiAgICAvKg0KICAgICAqICAgMS4gVmVyaWZ5IHRoYXQgciBhbmQgcyBhcmUgaW50ZWdlcnMgaW4gdGhlIGludGVydmFsIFsxLCBuLTFdLiBJZiBub3QsIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZA0KICAgICAqICAgMi4gQ29tcHV0ZSBlID0gSEFTSCAobSksIHdoZXJlIEhBU0ggaXMgdGhlIGhhc2hpbmcgYWxnb3JpdGhtIGluIHNpZ25hdHVyZSBnZW5lcmF0aW9uDQogICAgICogICAgICAoMSkgVXNlIFNIQSB0byBjYWxjdWxhdGUgZQ0KICAgICAqLw0KDQogICAgLyoNCiAgICAgKiAgIDMuIENvbXB1dGUgdyA9IHNeLTEgKG1vZCBuKQ0KICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciB0byBOIHJlZ2lzdGVycw0KICAgICAqICAgICAgKDIpIFdyaXRlIDB4MSB0byBZMSByZWdpc3RlcnMNCiAgICAgKiAgICAgICgzKSBXcml0ZSBzIHRvIFgxIHJlZ2lzdGVycw0KICAgICAqICAgICAgKDQpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxDQogICAgICogICAgICAoNSkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAwDQogICAgICogICAgICAoNikgU2V0IEZTRUwoQ1JQVF9FQ0NfQ1RMWzhdKSBhY2NvcmRpbmcgdG8gdXNlZCBjdXJ2ZSBvZiBwcmltZSBmaWVsZCBvciBiaW5hcnkgZmllbGQNCiAgICAgKiAgICAgICg3KSBTZXQgU1RBUlQoQ1JQVF9FQ0NfQ1RMWzBdKSB0byAxDQogICAgICogICAgICAoOCkgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQNCiAgICAgKiAgICAgICg5KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgdw0KICAgICAqLw0KDQogICAgaWYoZWNjX2luaXRfY3VydmUoY3JwdCwgZWNjX2N1cnZlKSAhPSAwKQ0KICAgIHsNCiAgICAgICAgcmV0ID0gLTE7DQogICAgfQ0KDQogICAgaWYocmV0ID09IDApDQogICAgew0KDQogICAgICAgIC8qICAzLSgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgdG8gTiByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOw0KDQogICAgICAgIC8qICAzLSgyKSBXcml0ZSAweDEgdG8gWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBjcnB0LT5FQ0NfWTFbMF0gPSAweDFVTDsNCg0KICAgICAgICAvKiAgMy0oMykgV3JpdGUgcyB0byBYMSByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgQ1JQVC0+RUNDX1gxW2ldID0gMFVMOw0KICAgICAgICB9DQogICAgICAgIEhleDJSZWcoUywgY3JwdC0+RUNDX1gxKTsNCg0KICAgICAgICBydW5fZWNjX2NvZGVjKGNycHQsIEVDQ09QX01PRFVMRSB8IE1PRE9QX0RJVik7DQoNCiAgICAgICAgLyogIDMtKDkpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB3ICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIHRlbXBfcmVzdWx0MltpXSA9IGNycHQtPkVDQ19YMVtpXTsNCiAgICAgICAgfQ0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIENSUFRfREJHTVNHKCJlID0gJXNcbiIsIG1lc3NhZ2UpOw0KICAgICAgICBSZWcySGV4KHBDdXJ2ZS0+RWNoYXIsIHRlbXBfcmVzdWx0MiwgdGVtcF9oZXhfc3RyKTsNCiAgICAgICAgQ1JQVF9EQkdNU0coIncgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiAgICAgICAgQ1JQVF9EQkdNU0coIm8gPSAlcyAob3JkZXIpXG4iLCBwQ3VydmUtPkVvcmRlcik7DQojZW5kaWYNCg0KICAgICAgICAvKg0KICAgICAgICAgKiAgIDQuIENvbXB1dGUgdTEgPSBlIKHRIHcgKG1vZCBuKSBhbmQgdTIgPSByIKHRIHcgKG1vZCBuKQ0KICAgICAgICAgKiAgICAgICgxKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycw0KICAgICAgICAgKiAgICAgICgyKSBXcml0ZSBlLCB3IHRvIFgxLCBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMykgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDENCiAgICAgICAgICogICAgICAoNCkgU2V0IE1PUE9QKENSUFRfRUNDX0NUTFsxMjoxMV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDUpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDENCiAgICAgICAgICogICAgICAoNikgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQNCiAgICAgICAgICogICAgICAoNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHUxDQogICAgICAgICAqICAgICAgKDgpIFdyaXRlIHRoZSBjdXJ2ZSBvcmRlciBhbmQgY3VydmUgbGVuZ3RoIHRvIE4gLE0gcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDkpIFdyaXRlIHIsIHcgdG8gWDEsIFkxIHJlZ2lzdGVycw0KICAgICAgICAgKiAgICAgICgxMCkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDENCiAgICAgICAgICogICAgICAoMTEpIFNldCBNT1BPUChDUlBUX0VDQ19DVExbMTI6MTFdKSB0byAwMQ0KICAgICAgICAgKiAgICAgICgxMikgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQ0KICAgICAgICAgKiAgICAgICgxMykgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQNCiAgICAgICAgICogICAgICAoMTQpIFJlYWQgWDEgcmVnaXN0ZXJzIHRvIGdldCB1Mg0KICAgICAgICAgKi8NCg0KICAgICAgICAvKiAgNC0oMSkgV3JpdGUgdGhlIGN1cnZlIG9yZGVyIGFuZCBjdXJ2ZSBsZW5ndGggdG8gTiAsTSByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX05baV0gPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgSGV4MlJlZyhwQ3VydmUtPkVvcmRlciwgY3JwdC0+RUNDX04pOw0KDQogICAgICAgIC8qIDQtKDIpIFdyaXRlIGUsIHcgdG8gWDEsIFkxIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfWDFbaV0gPSAwVUw7DQogICAgICAgIH0NCiAgICAgICAgSGV4MlJlZyhtZXNzYWdlLCBjcnB0LT5FQ0NfWDEpOw0KDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IHRlbXBfcmVzdWx0MltpXTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfTVVMKTsNCg0KICAgICAgICAvKiAgNC0oNykgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHUxICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIHRlbXBfcmVzdWx0MVtpXSA9IGNycHQtPkVDQ19YMVtpXTsNCiAgICAgICAgfQ0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQxLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygidTEgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiNlbmRpZg0KDQogICAgICAgIC8qICA0LSg4KSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7DQoNCiAgICAgICAgLyogNC0oOSkgV3JpdGUgciwgdyB0byBYMSwgWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKFIsIGNycHQtPkVDQ19YMSk7DQoNCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gdGVtcF9yZXN1bHQyW2ldOw0KICAgICAgICB9DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9NT0RVTEUgfCBNT0RPUF9NVUwpOw0KDQogICAgICAgIC8qICA0LSgxNCkgUmVhZCBYMSByZWdpc3RlcnMgdG8gZ2V0IHUyICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIHRlbXBfcmVzdWx0MltpXSA9IGNycHQtPkVDQ19YMVtpXTsNCiAgICAgICAgfQ0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQyLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygidTIgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiNlbmRpZg0KDQogICAgICAgIC8qDQogICAgICAgICAqICAgNS4gQ29tcHV0ZSBYoaYgKHgxoaYsIHkxoaYpID0gdTEgKiBHICsgdTIgKiBRDQogICAgICAgICAqICAgICAgKDEpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDIpIFdyaXRlIHRoZSBwb2ludCBHKHgsIHkpIHRvIFgxLCBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMykgV3JpdGUgdTEgdG8gSyByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoNCkgU2V0IEVDQ09QKENSUFRfRUNDX0NUTFsxMDo5XSkgdG8gMDANCiAgICAgICAgICogICAgICAoNSkgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQ0KICAgICAgICAgKiAgICAgICg2KSBXYWl0IGZvciBCVVNZKENSUFRfRUNDX1NUU1swXSkgYmUgY2xlYXJlZA0KICAgICAgICAgKiAgICAgICg3KSBSZWFkIFgxLCBZMSByZWdpc3RlcnMgdG8gZ2V0IHUxKkcNCiAgICAgICAgICogICAgICAoOCkgV3JpdGUgdGhlIGN1cnZlIHBhcmFtZXRlciBBLCBCLCBOLCBhbmQgY3VydmUgbGVuZ3RoIE0gdG8gY29ycmVzcG9uZGluZyByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoOSkgV3JpdGUgdGhlIHB1YmxpYyBrZXkgUSh4LHkpIHRvIFgxLCBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMTApIFdyaXRlIHUyIHRvIEsgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDExKSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAwMA0KICAgICAgICAgKiAgICAgICgxMikgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQ0KICAgICAgICAgKiAgICAgICgxMykgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQNCiAgICAgICAgICogICAgICAoMTQpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDE1KSBXcml0ZSB0aGUgcmVzdWx0IGRhdGEgdTEqRyB0byBYMiwgWTIgcmVnaXN0ZXJzDQogICAgICAgICAqICAgICAgKDE2KSBTZXQgRUNDT1AoQ1JQVF9FQ0NfQ1RMWzEwOjldKSB0byAxMA0KICAgICAgICAgKiAgICAgICgxNykgU2V0IFNUQVJUKENSUFRfRUNDX0NUTFswXSkgdG8gMQ0KICAgICAgICAgKiAgICAgICgxOCkgV2FpdCBmb3IgQlVTWShDUlBUX0VDQ19TVFNbMF0pIGJlIGNsZWFyZWQNCiAgICAgICAgICogICAgICAoMTkpIFJlYWQgWDEsIFkxIHJlZ2lzdGVycyB0byBnZXQgWKGmKHgxoaYsIHkxoaYpDQogICAgICAgICAqICAgICAgKDIwKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycw0KICAgICAgICAgKiAgICAgICgyMSkgV3JpdGUgeDGhpiB0byBYMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMjIpIFdyaXRlIDB4MCB0byBZMSByZWdpc3RlcnMNCiAgICAgICAgICogICAgICAoMjMpIFNldCBFQ0NPUChDUlBUX0VDQ19DVExbMTA6OV0pIHRvIDAxDQogICAgICAgICAqICAgICAgKDI0KSBTZXQgTU9QT1AoQ1JQVF9FQ0NfQ1RMWzEyOjExXSkgdG8gMTANCiAgICAgICAgICogICAgICAoMjUpIFNldCBTVEFSVChDUlBUX0VDQ19DVExbMF0pIHRvIDENCiAgICAgICAgICogICAgICAoMjYpIFdhaXQgZm9yIEJVU1koQ1JQVF9FQ0NfU1RTWzBdKSBiZSBjbGVhcmVkDQogICAgICAgICAqICAgICAgKDI3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgeDGhpiAobW9kIG4pDQogICAgICAgICAqDQogICAgICAgICAqICAgNi4gVGhlIHNpZ25hdHVyZSBpcyB2YWxpZCBpZiB4MaGmID0gciwgb3RoZXJ3aXNlIGl0IGlzIGludmFsaWQNCiAgICAgICAgICovDQoNCiAgICAgICAgLyoNCiAgICAgICAgICogICgxKSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycw0KICAgICAgICAgKiAgKDIpIFdyaXRlIHRoZSBwb2ludCBHKHgsIHkpIHRvIFgxLCBZMSByZWdpc3RlcnMNCiAgICAgICAgICovDQogICAgICAgIGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSk7DQoNCiAgICAgICAgLyogKDMpIFdyaXRlIHUxIHRvIEsgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gdGVtcF9yZXN1bHQxW2ldOw0KICAgICAgICB9DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9QT0lOVF9NVUwpOw0KDQogICAgICAgIC8qICg3KSBSZWFkIFgxLCBZMSByZWdpc3RlcnMgdG8gZ2V0IHUxKkcgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgdGVtcF94W2ldID0gY3JwdC0+RUNDX1gxW2ldOw0KICAgICAgICAgICAgdGVtcF95W2ldID0gY3JwdC0+RUNDX1kxW2ldOw0KICAgICAgICB9DQoNCiNpZiBFTkFCTEVfREVCVUcNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3gsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCI1LSg3KSB1MSpHLCB4ID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF95LCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiNS0oNykgdTEqRywgeSA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOw0KI2VuZGlmDQoNCiAgICAgICAgLyogKDgpIFdyaXRlIHRoZSBjdXJ2ZSBwYXJhbWV0ZXIgQSwgQiwgTiwgYW5kIGN1cnZlIGxlbmd0aCBNIHRvIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzICovDQogICAgICAgIGVjY19pbml0X2N1cnZlKGNycHQsIGVjY19jdXJ2ZSk7DQoNCiAgICAgICAgLyogKDkpIFdyaXRlIHRoZSBwdWJsaWMga2V5IFEoeCx5KSB0byBYMSwgWTEgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19YMVtpXSA9IDBVTDsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMVtpXSA9IDBVTDsNCiAgICAgICAgfQ0KDQogICAgICAgIEhleDJSZWcocHVibGljX2sxLCBjcnB0LT5FQ0NfWDEpOw0KICAgICAgICBIZXgyUmVnKHB1YmxpY19rMiwgY3JwdC0+RUNDX1kxKTsNCg0KICAgICAgICAvKiAoMTApIFdyaXRlIHUyIHRvIEsgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19LW2ldID0gdGVtcF9yZXN1bHQyW2ldOw0KICAgICAgICB9DQoNCiAgICAgICAgcnVuX2VjY19jb2RlYyhjcnB0LCBFQ0NPUF9QT0lOVF9NVUwpOw0KDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIHRlbXBfcmVzdWx0MVtpXSA9IGNycHQtPkVDQ19YMVtpXTsNCiAgICAgICAgICAgIHRlbXBfcmVzdWx0MltpXSA9IGNycHQtPkVDQ19ZMVtpXTsNCiAgICAgICAgfQ0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF9yZXN1bHQxLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiNS0oMTMpIHUyKlEsIHggPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCB0ZW1wX3Jlc3VsdDIsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCI1LSgxMykgdTIqUSwgeSA9ICVzXG4iLCB0ZW1wX2hleF9zdHIpOw0KI2VuZGlmDQoNCiAgICAgICAgLyogKDE0KSBXcml0ZSB0aGUgY3VydmUgcGFyYW1ldGVyIEEsIEIsIE4sIGFuZCBjdXJ2ZSBsZW5ndGggTSB0byBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycyAqLw0KICAgICAgICBlY2NfaW5pdF9jdXJ2ZShjcnB0LCBlY2NfY3VydmUpOw0KDQogICAgICAgIC8qIFdyaXRlIHRoZSByZXN1bHQgZGF0YSB1MipRIHRvIFgxLCBZMSByZWdpc3RlcnMgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gdGVtcF9yZXN1bHQxW2ldOw0KICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gdGVtcF9yZXN1bHQyW2ldOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogKDE1KSBXcml0ZSB0aGUgcmVzdWx0IGRhdGEgdTEqRyB0byBYMiwgWTIgcmVnaXN0ZXJzICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIGNycHQtPkVDQ19YMltpXSA9IHRlbXBfeFtpXTsNCiAgICAgICAgICAgIGNycHQtPkVDQ19ZMltpXSA9IHRlbXBfeVtpXTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfUE9JTlRfQUREKTsNCg0KICAgICAgICAvKiAoMTkpIFJlYWQgWDEsIFkxIHJlZ2lzdGVycyB0byBnZXQgWKGmKHgxoaYsIHkxoaYpICovDQogICAgICAgIGZvcihpID0gMDsgaSA8IDE4OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgIHRlbXBfeFtpXSA9IGNycHQtPkVDQ19YMVtpXTsNCiAgICAgICAgICAgIHRlbXBfeVtpXSA9IGNycHQtPkVDQ19ZMVtpXTsNCiAgICAgICAgfQ0KDQojaWYgRU5BQkxFX0RFQlVHDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF94LCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiNS0oMTkpIHgnID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgdGVtcF95LCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiNS0oMTkpIHknID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7DQojZW5kaWYNCg0KICAgICAgICAvKiAgKDIwKSBXcml0ZSB0aGUgY3VydmUgb3JkZXIgYW5kIGN1cnZlIGxlbmd0aCB0byBOICxNIHJlZ2lzdGVycyAqLw0KICAgICAgICBmb3IoaSA9IDA7IGkgPCAxODsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICBjcnB0LT5FQ0NfTltpXSA9IDBVTDsNCiAgICAgICAgfQ0KICAgICAgICBIZXgyUmVnKHBDdXJ2ZS0+RW9yZGVyLCBjcnB0LT5FQ0NfTik7DQoNCiAgICAgICAgLyoNCiAgICAgICAgICogICgyMSkgV3JpdGUgeDGhpiB0byBYMSByZWdpc3RlcnMNCiAgICAgICAgICogICgyMikgV3JpdGUgMHgwIHRvIFkxIHJlZ2lzdGVycw0KICAgICAgICAgKi8NCiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTg7IGkrKykNCiAgICAgICAgew0KICAgICAgICAgICAgY3JwdC0+RUNDX1gxW2ldID0gdGVtcF94W2ldOw0KICAgICAgICAgICAgY3JwdC0+RUNDX1kxW2ldID0gMFVMOw0KICAgICAgICB9DQoNCiNpZiBFTkFCTEVfREVCVUcNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWDEsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCI1LSgyMSkgeCcgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiAgICAgICAgUmVnMkhleChwQ3VydmUtPkVjaGFyLCBjcnB0LT5FQ0NfWTEsIHRlbXBfaGV4X3N0cik7DQogICAgICAgIENSUFRfREJHTVNHKCI1LSgyMikgeScgPSAlc1xuIiwgdGVtcF9oZXhfc3RyKTsNCiNlbmRpZg0KDQogICAgICAgIHJ1bl9lY2NfY29kZWMoY3JwdCwgRUNDT1BfTU9EVUxFIHwgTU9ET1BfQUREKTsNCg0KICAgICAgICAvKiAgKDI3KSBSZWFkIFgxIHJlZ2lzdGVycyB0byBnZXQgeDGhpiAobW9kIG4pICovDQogICAgICAgIFJlZzJIZXgocEN1cnZlLT5FY2hhciwgY3JwdC0+RUNDX1gxLCB0ZW1wX2hleF9zdHIpOw0KICAgICAgICBDUlBUX0RCR01TRygiNS0oMjcpIHgxJyAobW9kIG4pID0gJXNcbiIsIHRlbXBfaGV4X3N0cik7DQoNCiAgICAgICAgLyogNi4gVGhlIHNpZ25hdHVyZSBpcyB2YWxpZCBpZiB4MaGmID0gciwgb3RoZXJ3aXNlIGl0IGlzIGludmFsaWQgKi8NCg0KICAgICAgICAvKiBDb21wYXJlIHdpdGggdGVzdCBwYXR0ZXJuIHRvIGNoZWNrIGlmIHIgaXMgY29ycmVjdCBvciBub3QgKi8NCiAgICAgICAgaWYoc3RyY2FzZWNtcCh0ZW1wX2hleF9zdHIsIFIpICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIENSUFRfREJHTVNHKCJ4MScgKG1vZCBuKSAhPSBSIFRlc3QgZmlsZWQhIVxuIik7DQogICAgICAgICAgICBDUlBUX0RCR01TRygiU2lnbmF0dXJlIFIgWyVzXSBpcyBub3QgbWF0Y2hlZCB3aXRoIGV4cGVjdGVkIFIgWyVzXSFcbiIsIHRlbXBfaGV4X3N0ciwgUik7DQogICAgICAgICAgICByZXQgPSAtMjsNCiAgICAgICAgfQ0KICAgIH0gIC8qIHJldCA9PSAwICovDQoNCiAgICByZXR1cm4gcmV0Ow0KfQ0KDQojaWYgWE9NX1NVUFBPUlQgLy8gVG8gc3VwcG9ydCBYT00gcmVhZHkgY3VydmUgdGFibGUNCg0KaW50MzJfdCBDdXJ2ZUNweSh1bnNpZ25lZCBpbnQgKnAzMiwgRV9FQ0NfQ1VSVkUgaWQpDQp7DQogICAgaW50MzJfdCBpOw0KDQogICAgc3dpdGNoKGlkKQ0KICAgIHsNCiAgICAgICAgY2FzZSBDVVJWRV9QXzE5MjoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwMDsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSA4OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgcDMyWyAgOV0gPSAweDQ1NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAxMF0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAxMV0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAxMl0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAxM10gPSAweDQzNDY0NjQ2Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNDsgaSA8PSAzNzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzMTMyMzQzNjsNCiAgICAgICAgICAgIHAzMlsgMzldID0gMHgzOTMxMzUzMDsNCiAgICAgICAgICAgIHAzMlsgNDBdID0gMHg2MzM5MzU2NTsNCiAgICAgICAgICAgIHAzMlsgNDFdID0gMHgzNzY1MzAzODsNCiAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzNzYxNjYzMDsNCiAgICAgICAgICAgIHAzMlsgNDNdID0gMHg2MjYxMzk2NTsNCiAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzNDMyMzIzNzsNCiAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzOTM0MzAzMzsNCiAgICAgICAgICAgIHAzMlsgNDZdID0gMHgzODYyNjU2NjsNCiAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MzY1NjU2NDsNCiAgICAgICAgICAgIHAzMlsgNDhdID0gMHgzNjM0MzE2MzsNCiAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMTYyMzk2MjsNCiAgICAgICAgICAgIGZvcihpID0gNTA7IGkgPD0gNzM7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjQzODM4MzE7DQogICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjUzMDM4NjE7DQogICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzAzMzMwNjI7DQogICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzY2NjMwMzk7DQogICAgICAgICAgICBwMzJbIDc4XSA9IDB4NjY2MjYzMzc7DQogICAgICAgICAgICBwMzJbIDc5XSA9IDB4NjI2NTMwMzI7DQogICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzE2MTMzMzQ7DQogICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzAzMDM4Mzg7DQogICAgICAgICAgICBwMzJbIDgyXSA9IDB4NjY2NjM0NjY7DQogICAgICAgICAgICBwMzJbIDgzXSA9IDB4NjQ2NjYxMzA7DQogICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjY2NjMyMzg7DQogICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzIzMTMwMzE7DQogICAgICAgICAgICBmb3IoaSA9IDg2OyBpIDw9IDEwOTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzOTMxMzczMDsNCiAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNTM5NjIzMjsNCiAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzODYzNjY2NjsNCiAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzODM3NjE2NDsNCiAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMDMxMzMzNjsNCiAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2NDY1MzEzMTsNCiAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzNDMyNjIzNjsNCiAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNTY0NjQ2MzsNCiAgICAgICAgICAgIHAzMlsxMThdID0gMHgzOTY2MzMzNzsNCiAgICAgICAgICAgIHAzMlsxMTldID0gMHgzMTYxMzczNzsNCiAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzOTM3NjUzMTsNCiAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzMTMxMzgzNDsNCiAgICAgICAgICAgIGZvcihpID0gMTIyOyBpIDw9IDE0NTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDAzYTsNCiAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1MzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsxNTRdID0gMHg0NTQ2NDY0NjsNCiAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1ODsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIGZvcihpID0gMTU5OyBpIDw9IDE5MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDAzYTsNCiAgICAgICAgICAgIGZvcihpID0gMTkyOyBpIDw9IDE5NzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsxOThdID0gMHg0NTQ0MzkzOTsNCiAgICAgICAgICAgIHAzMlsxOTldID0gMHgzNjMzMzg0NjsNCiAgICAgICAgICAgIHAzMlsyMDBdID0gMHg0MjM2MzQzMTsNCiAgICAgICAgICAgIHAzMlsyMDFdID0gMHgzMTQyMzk0MzsNCiAgICAgICAgICAgIHAzMlsyMDJdID0gMHgzMjQ0MzQ0MjsNCiAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzMTMzMzgzMjsNCiAgICAgICAgICAgIGZvcihpID0gMjA0OyBpIDw9IDIzNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBjMDsNCiAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwNzsNCiAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwMjsNCiAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMTsNCiAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIENVUlZFX1BfMjI0Og0KICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAxOw0KICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDM4Ow0KICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDg7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbICA5XSA9IDB4NDU0NjQ2NDY7DQogICAgICAgICAgICBmb3IoaSA9IDEwOyBpIDw9IDE0OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgcDMyWyAxNV0gPSAweDQ1NDY0NjQ2Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNjsgaSA8PSAzNzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsgMzhdID0gMHgzNTMwMzQ2MjsNCiAgICAgICAgICAgIHAzMlsgMzldID0gMHgzNTM4NjEzMDsNCiAgICAgICAgICAgIHAzMlsgNDBdID0gMHgzNDMwNjMzMDsNCiAgICAgICAgICAgIHAzMlsgNDFdID0gMHg2MjYxMzM2MjsNCiAgICAgICAgICAgIHAzMlsgNDJdID0gMHgzMTM0MzU2NjsNCiAgICAgICAgICAgIHAzMlsgNDNdID0gMHgzNjM1MzIzMzsNCiAgICAgICAgICAgIHAzMlsgNDRdID0gMHgzNDM0MzAzNTsNCiAgICAgICAgICAgIHAzMlsgNDVdID0gMHgzNzYyMzA2MjsNCiAgICAgICAgICAgIHAzMlsgNDZdID0gMHg2NjYyMzc2NDsNCiAgICAgICAgICAgIHAzMlsgNDddID0gMHg2MTYyMzg2NDsNCiAgICAgICAgICAgIHAzMlsgNDhdID0gMHg2MjMwMzczMjsNCiAgICAgICAgICAgIHAzMlsgNDldID0gMHgzMzM0MzkzMzsNCiAgICAgICAgICAgIHAzMlsgNTBdID0gMHgzNTM1MzMzMjsNCiAgICAgICAgICAgIHAzMlsgNTFdID0gMHgzNDYyNjY2NjsNCiAgICAgICAgICAgIGZvcihpID0gNTI7IGkgPD0gNzM7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDc0XSA9IDB4NjUzMDM3NjI7DQogICAgICAgICAgICBwMzJbIDc1XSA9IDB4NjQ2MjYzMzA7DQogICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzQ2MjYyMzY7DQogICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjYzNzY2NjI7DQogICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzMzMTMyMzM7DQogICAgICAgICAgICBwMzJbIDc5XSA9IDB4Mzk2MjMwMzk7DQogICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzMzMDYxMzQ7DQogICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzM2NDMxNjM7DQogICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzI2MzM2MzU7DQogICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzIzMjMxMzE7DQogICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzIzMzM0MzM7DQogICAgICAgICAgICBwMzJbIDg1XSA9IDB4MzY2NDMwMzg7DQogICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjMzNTMxMzE7DQogICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzEzMjY0MzE7DQogICAgICAgICAgICBmb3IoaSA9IDg4OyBpIDw9IDEwOTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNzMzNjQ2MjsNCiAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzODM4MzMzNjsNCiAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzNzY2MzU2MjsNCiAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MjY2MzMzMjsNCiAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMjMyNjMzNDsNCiAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNjY1NjY2NDsNCiAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMzM0NjQ2MzsNCiAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMDYxMzUzNzsNCiAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNzMwNjEzNTsNCiAgICAgICAgICAgIHAzMlsxMTldID0gMHgzNDM2MzczNDsNCiAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNTY0MzQzNDsNCiAgICAgICAgICAgIHAzMlsxMjFdID0gMHgzOTM5MzEzODsNCiAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMDMwMzUzODsNCiAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzNDMzNjUzNzsNCiAgICAgICAgICAgIGZvcihpID0gMTI0OyBpIDw9IDE0NTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NjsNCiAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0NjsNCiAgICAgICAgICAgIGZvcihpID0gMTkyOyBpIDw9IDE5ODsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsxOTldID0gMHgzMjQxMzYzMTsNCiAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzODQyMzA0NTsNCiAgICAgICAgICAgIHAzMlsyMDFdID0gMHg0NTMzMzA0NjsNCiAgICAgICAgICAgIHAzMlsyMDJdID0gMHg0NDQ0MzMzMTsNCiAgICAgICAgICAgIHAzMlsyMDNdID0gMHgzNTM0MzkzMjsNCiAgICAgICAgICAgIHAzMlsyMDRdID0gMHg0MzM1NDMzNTsNCiAgICAgICAgICAgIHAzMlsyMDVdID0gMHg0NDMzNDEzMjsNCiAgICAgICAgICAgIGZvcihpID0gMjA2OyBpIDw9IDIzNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBlMDsNCiAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwOTsNCiAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwODsNCiAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMzsNCiAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIENVUlZFX1BfMjU2Og0KICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDAyOw0KICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDQwOw0KICAgICAgICAgICAgcDMyWyAgMl0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAgM10gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWyAgNF0gPSAweDMwMzAzMDMwOw0KICAgICAgICAgICAgcDMyWyAgNV0gPSAweDMxMzAzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSA2OyBpIDw9IDExOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgZm9yKGkgPSAxMjsgaSA8PSAxNjsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsgMTddID0gMHg0MzQ2NDY0NjsNCiAgICAgICAgICAgIGZvcihpID0gMTg7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MzYxMzU7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4Mzg2NDM1MzM7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjEzMzYxNjE7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzc2NTMzMzk7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4NjI2NTMzNjI7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzUzNTY0NjI7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzgzOTM2Mzc7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4NjM2MjM2Mzg7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjQzMTM1MzY7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4MzA2MjM2MzA7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzMzNTYzNjM7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzY2NjMwNjI7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjU2MzYyMzM7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjUzMzYzMzM7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzI2NDM3MzI7DQogICAgICAgICAgICBwMzJbIDUzXSA9IDB4NjIzNDMwMzY7DQogICAgICAgICAgICBmb3IoaSA9IDU0OyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDM3MzE2MjM2Ow0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDMyNjYzMTY0Ow0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYzMzIzMTY1Ow0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDM3MzQzMjM0Ow0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDYzNjIzODY2Ow0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM1NjUzNjY1Ow0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM0NjEzMzM2Ow0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMyNjYzMDM0Ow0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzMzAzNzM3Ow0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDMxMzg2NDM3Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDYyNjU2NDMyOw0KICAgICAgICAgICAgcDMyWyA4NV0gPSAweDMwNjEzMzMzOw0KICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDMxNjEzNDY2Ow0KICAgICAgICAgICAgcDMyWyA4N10gPSAweDM1MzQzOTMzOw0KICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM4MzkzODY0Ow0KICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM2MzkzMjYzOw0KICAgICAgICAgICAgZm9yKGkgPSA5MDsgaSA8PSAxMDk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzM2NTY2MzQ7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4MzI2NTMyMzQ7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4NjEzMTY1NjY7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjIzOTY2Mzc7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4Mzc2NTY1Mzg7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjEzNDYyNjU7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4NjYzMDYzMzc7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzYzMTY1Mzk7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjU2MzYyMzI7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzczNTMzMzM7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzEzMzYyMzY7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4NjU2MzY1MzU7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzY2MjYyNjM7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzgzNjMwMzQ7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjY2MjM3MzM7DQogICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzU2NjMxMzU7DQogICAgICAgICAgICBmb3IoaSA9IDEyNjsgaSA8PSAxNDU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNGU7DQogICAgICAgICAgICBwMzJbMTQ3XSA9IDB4NDY0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMTQ4XSA9IDB4NDY0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMTQ5XSA9IDB4MzAzMDMwMzA7DQogICAgICAgICAgICBwMzJbMTUwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE1MTsgaSA8PSAxNTY7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NzsgaSA8PSAxNjI7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE2MzsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNGU7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMTkzXSA9IDB4NDY0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMTk0XSA9IDB4MzAzMDMwMzA7DQogICAgICAgICAgICBwMzJbMTk1XSA9IDB4MzAzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE5NjsgaSA8PSAxOTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMjAwXSA9IDB4MzY0NTQzNDI7DQogICAgICAgICAgICBwMzJbMjAxXSA9IDB4NDQ0MTQxNDY7DQogICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzczMTM3NDE7DQogICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzQzODQ1Mzk7DQogICAgICAgICAgICBwMzJbMjA0XSA9IDB4Mzk0MjMzNDY7DQogICAgICAgICAgICBwMzJbMjA1XSA9IDB4MzI0MzQxNDM7DQogICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzMzNjQzNDY7DQogICAgICAgICAgICBwMzJbMjA3XSA9IDB4MzEzNTM1MzI7DQogICAgICAgICAgICBmb3IoaSA9IDIwODsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMDA7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGE7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDU7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDI7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9QXzM4NDoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwMzsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2MDsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxNjsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsgMTddID0gMHg0NTQ2NDY0NjsNCiAgICAgICAgICAgIHAzMlsgMThdID0gMHg0NjQ2NDY0NjsNCiAgICAgICAgICAgIHAzMlsgMTldID0gMHg0NjQ2NDY0NjsNCiAgICAgICAgICAgIGZvcihpID0gMjA7IGkgPD0gMjM7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbIDI0XSA9IDB4NDY0NjQ2NDY7DQogICAgICAgICAgICBwMzJbIDI1XSA9IDB4NDM0NjQ2NDY7DQogICAgICAgICAgICBmb3IoaSA9IDI2OyBpIDw9IDM3OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyAzOF0gPSAweDMxMzMzMzYyOw0KICAgICAgICAgICAgcDMyWyAzOV0gPSAweDM3NjE2NjMyOw0KICAgICAgICAgICAgcDMyWyA0MF0gPSAweDY1MzMzMjY1Ow0KICAgICAgICAgICAgcDMyWyA0MV0gPSAweDM0NjUzNzY1Ow0KICAgICAgICAgICAgcDMyWyA0Ml0gPSAweDY1MzgzODM5Ow0KICAgICAgICAgICAgcDMyWyA0M10gPSAweDYyMzYzNTMwOw0KICAgICAgICAgICAgcDMyWyA0NF0gPSAweDM4NjYzMzY1Ow0KICAgICAgICAgICAgcDMyWyA0NV0gPSAweDM5MzE2NDMyOw0KICAgICAgICAgICAgcDMyWyA0Nl0gPSAweDY0MzEzODMxOw0KICAgICAgICAgICAgcDMyWyA0N10gPSAweDY1MzY2MzM5Ow0KICAgICAgICAgICAgcDMyWyA0OF0gPSAweDMxMzg2NTY2Ow0KICAgICAgICAgICAgcDMyWyA0OV0gPSAweDMyMzEzMTM0Ow0KICAgICAgICAgICAgcDMyWyA1MF0gPSAweDM0MzEzMzMwOw0KICAgICAgICAgICAgcDMyWyA1MV0gPSAweDY2MzgzODMwOw0KICAgICAgICAgICAgcDMyWyA1Ml0gPSAweDMzMzEzMDM1Ow0KICAgICAgICAgICAgcDMyWyA1M10gPSAweDYxMzUzNzM4Ow0KICAgICAgICAgICAgcDMyWyA1NF0gPSAweDM2MzUzNjYzOw0KICAgICAgICAgICAgcDMyWyA1NV0gPSAweDY0MzgzOTMzOw0KICAgICAgICAgICAgcDMyWyA1Nl0gPSAweDY1MzI2MTM4Ow0KICAgICAgICAgICAgcDMyWyA1N10gPSAweDY0MzkzMTY0Ow0KICAgICAgICAgICAgcDMyWyA1OF0gPSAweDM1Mzg2MTMyOw0KICAgICAgICAgICAgcDMyWyA1OV0gPSAweDY0NjUzODYzOw0KICAgICAgICAgICAgcDMyWyA2MF0gPSAweDYzNjUzMzY0Ow0KICAgICAgICAgICAgcDMyWyA2MV0gPSAweDY2NjU2MTMyOw0KICAgICAgICAgICAgZm9yKGkgPSA2MjsgaSA8PSA3MzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzNzM4NjE2MTsNCiAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzMjMyNjE2MzsNCiAgICAgICAgICAgIHAzMlsgNzZdID0gMHg2MjM4NjU2MjsNCiAgICAgICAgICAgIHAzMlsgNzddID0gMHgzNzMzMzUzMDsNCiAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMTYyNjUzODsNCiAgICAgICAgICAgIHAzMlsgNzldID0gMHg2NTMxMzc2MzsNCiAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMDMyMzM2NjsNCiAgICAgICAgICAgIHAzMlsgODFdID0gMHgzNDM3NjQ2MTsNCiAgICAgICAgICAgIHAzMlsgODJdID0gMHg2NDMxNjUzNjsNCiAgICAgICAgICAgIHAzMlsgODNdID0gMHgzMjM2NjIzMzsNCiAgICAgICAgICAgIHAzMlsgODRdID0gMHgzNzYxNjIzODsNCiAgICAgICAgICAgIHAzMlsgODVdID0gMHgzODM5NjIzOTsNCiAgICAgICAgICAgIHAzMlsgODZdID0gMHgzNzY2MzkzNTsNCiAgICAgICAgICAgIHAzMlsgODddID0gMHgzMDY1MzEzNDsNCiAgICAgICAgICAgIHAzMlsgODhdID0gMHgzNDM1MzIzODsNCiAgICAgICAgICAgIHAzMlsgODldID0gMHgzODMzNjEzMjsNCiAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzMjMwMzUzNTsNCiAgICAgICAgICAgIHAzMlsgOTFdID0gMHg2NDM1MzI2NjsNCiAgICAgICAgICAgIHAzMlsgOTJdID0gMHgzNTM1NjY2MjsNCiAgICAgICAgICAgIHAzMlsgOTNdID0gMHg2MzM2MzkzMjsNCiAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzNDM1NjEzMzsNCiAgICAgICAgICAgIHAzMlsgOTVdID0gMHgzODMzNjUzNTsNCiAgICAgICAgICAgIHAzMlsgOTZdID0gMHgzNjM3MzIzNzsNCiAgICAgICAgICAgIHAzMlsgOTddID0gMHgzNzYyNjEzMDsNCiAgICAgICAgICAgIGZvcihpID0gOTg7IGkgPD0gMTA5OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzExMF0gPSAweDM3MzEzNjMzOw0KICAgICAgICAgICAgcDMyWzExMV0gPSAweDYxMzQ2NTY0Ow0KICAgICAgICAgICAgcDMyWzExMl0gPSAweDM2MzIzNjM5Ow0KICAgICAgICAgICAgcDMyWzExM10gPSAweDY2MzY2MzMyOw0KICAgICAgICAgICAgcDMyWzExNF0gPSAweDY1Mzk2NDM1Ow0KICAgICAgICAgICAgcDMyWzExNV0gPSAweDY2NjIzODM5Ow0KICAgICAgICAgICAgcDMyWzExNl0gPSAweDMyMzkzMjM5Ow0KICAgICAgICAgICAgcDMyWzExN10gPSAweDM5MzI2MzY0Ow0KICAgICAgICAgICAgcDMyWzExOF0gPSAweDM0NjYzODY2Ow0KICAgICAgICAgICAgcDMyWzExOV0gPSAweDY0NjI2NDMxOw0KICAgICAgICAgICAgcDMyWzEyMF0gPSAweDYxMzkzODMyOw0KICAgICAgICAgICAgcDMyWzEyMV0gPSAweDYzMzczNDMxOw0KICAgICAgICAgICAgcDMyWzEyMl0gPSAweDYxNjQzOTY1Ow0KICAgICAgICAgICAgcDMyWzEyM10gPSAweDMzMzEzMTMzOw0KICAgICAgICAgICAgcDMyWzEyNF0gPSAweDMwNjYzNTYyOw0KICAgICAgICAgICAgcDMyWzEyNV0gPSAweDMwNjMzODYyOw0KICAgICAgICAgICAgcDMyWzEyNl0gPSAweDMwMzY2MTMwOw0KICAgICAgICAgICAgcDMyWzEyN10gPSAweDY1NjMzMTYyOw0KICAgICAgICAgICAgcDMyWzEyOF0gPSAweDY1Mzc2NDMxOw0KICAgICAgICAgICAgcDMyWzEyOV0gPSAweDY0MzkzMTM4Ow0KICAgICAgICAgICAgcDMyWzEzMF0gPSAweDMzMzQ2MTM3Ow0KICAgICAgICAgICAgcDMyWzEzMV0gPSAweDYzMzc2NDMxOw0KICAgICAgICAgICAgcDMyWzEzMl0gPSAweDYxNjUzMDM5Ow0KICAgICAgICAgICAgcDMyWzEzM10gPSAweDY2MzU2NTMwOw0KICAgICAgICAgICAgZm9yKGkgPSAxMzQ7IGkgPD0gMTQ1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDc0Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTYxOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgcDMyWzE2Ml0gPSAweDQ1NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWzE2M10gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWzE2NF0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNjU7IGkgPD0gMTY4OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWzE2OV0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgcDMyWzE3MF0gPSAweDQ2NDY0NjQ2Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNzE7IGkgPD0gMTkwOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDc0Ow0KICAgICAgICAgICAgZm9yKGkgPSAxOTI7IGkgPD0gMjAzOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgcDMyWzIwNF0gPSAweDMzMzYzNzQzOw0KICAgICAgICAgICAgcDMyWzIwNV0gPSAweDMxMzg0NDM0Ow0KICAgICAgICAgICAgcDMyWzIwNl0gPSAweDM3MzMzNDQ2Ow0KICAgICAgICAgICAgcDMyWzIwN10gPSAweDQ2NDQ0NDMyOw0KICAgICAgICAgICAgcDMyWzIwOF0gPSAweDQxMzEzODM1Ow0KICAgICAgICAgICAgcDMyWzIwOV0gPSAweDMyNDI0NDMwOw0KICAgICAgICAgICAgcDMyWzIxMF0gPSAweDMwNDIzODM0Ow0KICAgICAgICAgICAgcDMyWzIxMV0gPSAweDQxMzczNzQxOw0KICAgICAgICAgICAgcDMyWzIxMl0gPSAweDQzNDU0MzQ1Ow0KICAgICAgICAgICAgcDMyWzIxM10gPSAweDQxMzYzOTMxOw0KICAgICAgICAgICAgcDMyWzIxNF0gPSAweDM1NDM0MzQzOw0KICAgICAgICAgICAgcDMyWzIxNV0gPSAweDMzMzczOTMyOw0KICAgICAgICAgICAgZm9yKGkgPSAyMTY7IGkgPD0gMjM1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMTgwOw0KICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDBjOw0KICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDAzOw0KICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAyOw0KICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAwOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgQ1VSVkVfUF81MjE6DQogICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDQ7DQogICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwODM7DQogICAgICAgICAgICBwMzJbICAyXSA9IDB4NDY0NjQ2MzE7DQogICAgICAgICAgICBmb3IoaSA9IDM7IGkgPD0gMzM7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbIDM0XSA9IDB4MDA0MzQ2NDY7DQogICAgICAgICAgICBwMzJbIDM1XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDM2XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDM3XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzkzMTM1MzA7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjI2NTMzMzU7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzgzMTM2Mzk7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzk2MzMxNjU7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4Mzk2NjMxNjE7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzI2MTM5MzI7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4NjIzMDYxMzE7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzQzNTM4MzY7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjE2NTY1MzA7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4Mzc2MTY0MzI7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4Mzk2MjM1MzI7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzEzMzYyMzk7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjIzMzY2MzU7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4MzgzNDYyMzg7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzgzMTM5Mzk7DQogICAgICAgICAgICBwMzJbIDUzXSA9IDB4MzAzMTY2NjU7DQogICAgICAgICAgICBwMzJbIDU0XSA9IDB4MzUzMTY1Mzk7DQogICAgICAgICAgICBwMzJbIDU1XSA9IDB4MzMzOTMxMzY7DQogICAgICAgICAgICBwMzJbIDU2XSA9IDB4NjUzMTM1Mzk7DQogICAgICAgICAgICBwMzJbIDU3XSA9IDB4Mzk2NTM3NjM7DQogICAgICAgICAgICBwMzJbIDU4XSA9IDB4MzE2MjM3MzM7DQogICAgICAgICAgICBwMzJbIDU5XSA9IDB4NjMzMjM1MzY7DQogICAgICAgICAgICBwMzJbIDYwXSA9IDB4MzM2NDYyMzA7DQogICAgICAgICAgICBwMzJbIDYxXSA9IDB4NjIzMTYyNjI7DQogICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzMzNzMwNjY7DQogICAgICAgICAgICBwMzJbIDYzXSA9IDB4NjQzMzM3MzU7DQogICAgICAgICAgICBwMzJbIDY0XSA9IDB4MzMzODM4NjY7DQogICAgICAgICAgICBwMzJbIDY1XSA9IDB4MzM2MzMyNjQ7DQogICAgICAgICAgICBwMzJbIDY2XSA9IDB4NjUzMTY2MzQ7DQogICAgICAgICAgICBwMzJbIDY3XSA9IDB4MzEzNTM0NjY7DQogICAgICAgICAgICBwMzJbIDY4XSA9IDB4MzYzNDY0NjY7DQogICAgICAgICAgICBwMzJbIDY5XSA9IDB4MzMzMDM1NjI7DQogICAgICAgICAgICBwMzJbIDcwXSA9IDB4MDAzMDMwNjY7DQogICAgICAgICAgICBwMzJbIDcxXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDcyXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDczXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzgzNjYzMzA7DQogICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzA2NTM4MzU7DQogICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzAzNzYyMzY7DQogICAgICAgICAgICBwMzJbIDc3XSA9IDB4NjUzNDMwMzQ7DQogICAgICAgICAgICBwMzJbIDc4XSA9IDB4Mzk2NDYzMzk7DQogICAgICAgICAgICBwMzJbIDc5XSA9IDB4NjM2NTMzNjU7DQogICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzIzNjM2NjI7DQogICAgICAgICAgICBwMzJbIDgxXSA9IDB4NjIzNTM5MzM7DQogICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzkzMjM0MzQ7DQogICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzgzNDM2NjM7DQogICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzAzOTMzMzE7DQogICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjI2NjMzMzU7DQogICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjYzMTMyMzU7DQogICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjEzODMyMzg7DQogICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzYzMDM2NjY7DQogICAgICAgICAgICBwMzJbIDg5XSA9IDB4MzM2NDM0NjI7DQogICAgICAgICAgICBwMzJbIDkwXSA9IDB4NjE2MTYyNjQ7DQogICAgICAgICAgICBwMzJbIDkxXSA9IDB4MzU2MjM0MzE7DQogICAgICAgICAgICBwMzJbIDkyXSA9IDB4NjUzNzM3NjU7DQogICAgICAgICAgICBwMzJbIDkzXSA9IDB4MzUzNzY1NjY7DQogICAgICAgICAgICBwMzJbIDk0XSA9IDB4NjYzODMyMzk7DQogICAgICAgICAgICBwMzJbIDk1XSA9IDB4NjM2NDMxNjU7DQogICAgICAgICAgICBwMzJbIDk2XSA9IDB4NjEzNzMyMzE7DQogICAgICAgICAgICBwMzJbIDk3XSA9IDB4NjE2NjY2MzI7DQogICAgICAgICAgICBwMzJbIDk4XSA9IDB4MzM2NTY0Mzg7DQogICAgICAgICAgICBwMzJbIDk5XSA9IDB4NjIzODM0MzM7DQogICAgICAgICAgICBwMzJbMTAwXSA9IDB4MzgzMTYzMzM7DQogICAgICAgICAgICBwMzJbMTAxXSA9IDB4MzQ2MTM2MzU7DQogICAgICAgICAgICBwMzJbMTAyXSA9IDB4NjY2MjM5MzI7DQogICAgICAgICAgICBwMzJbMTAzXSA9IDB4Mzc2NTM3Mzk7DQogICAgICAgICAgICBwMzJbMTA0XSA9IDB4NjMzMTMzNjU7DQogICAgICAgICAgICBwMzJbMTA1XSA9IDB4NjIzNTY1MzI7DQogICAgICAgICAgICBwMzJbMTA2XSA9IDB4MDAzNjM2NjQ7DQogICAgICAgICAgICBwMzJbMTA3XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTA4XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTA5XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzMzODMxMzE7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4MzYzOTMyMzk7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzkzODM3NjE7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjM2MjMzNjE7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4MzUzNDMwMzA7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzU2MTM4NjM7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzIzNDYyNjY7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzE2NDM3NjM7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzkzOTY0NjI7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzQzNTY2Mzg7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzUzOTM0MzQ7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzQ2MjM5Mzc7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzEzODM2MzQ7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4NjI2NjYxMzc7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4MzIzNzMxNjQ7DQogICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzY2NTMzMzc7DQogICAgICAgICAgICBwMzJbMTI2XSA9IDB4Mzk2MzMyMzY7DQogICAgICAgICAgICBwMzJbMTI3XSA9IDB4Mzc2NTY1Mzc7DQogICAgICAgICAgICBwMzJbMTI4XSA9IDB4MzUzOTM5MzI7DQogICAgICAgICAgICBwMzJbMTI5XSA9IDB4MzIzNDY2NjU7DQogICAgICAgICAgICBwMzJbMTMwXSA9IDB4NjMzMDM0MzY7DQogICAgICAgICAgICBwMzJbMTMxXSA9IDB4NjIzMDM1MzU7DQogICAgICAgICAgICBwMzJbMTMyXSA9IDB4MzMzMTMwMzk7DQogICAgICAgICAgICBwMzJbMTMzXSA9IDB4MzA2NDYxNjY7DQogICAgICAgICAgICBwMzJbMTM0XSA9IDB4MzMzMTM2Mzc7DQogICAgICAgICAgICBwMzJbMTM1XSA9IDB4Mzc2MzMzMzU7DQogICAgICAgICAgICBwMzJbMTM2XSA9IDB4NjEzNjM4MzA7DQogICAgICAgICAgICBwMzJbMTM3XSA9IDB4NjMzMjM3MzI7DQogICAgICAgICAgICBwMzJbMTM4XSA9IDB4MzgzMDM0MzI7DQogICAgICAgICAgICBwMzJbMTM5XSA9IDB4Mzk2NTYyMzg7DQogICAgICAgICAgICBwMzJbMTQwXSA9IDB4MzkzNjM3MzQ7DQogICAgICAgICAgICBwMzJbMTQxXSA9IDB4MzYzMTY0NjY7DQogICAgICAgICAgICBwMzJbMTQyXSA9IDB4MDAzMDM1MzY7DQogICAgICAgICAgICBwMzJbMTQzXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTQ0XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTQ1XSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwOWQ7DQogICAgICAgICAgICBwMzJbMTQ3XSA9IDB4NDY0NjQ2MzE7DQogICAgICAgICAgICBmb3IoaSA9IDE0ODsgaSA8PSAxNzg7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMTc5XSA9IDB4MDA0NjQ2NDY7DQogICAgICAgICAgICBmb3IoaSA9IDE4MDsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwOWQ7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzE7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAyMDc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMjA4XSA9IDB4MzU0MTQ2NDY7DQogICAgICAgICAgICBwMzJbMjA5XSA9IDB4MzgzNjM4MzE7DQogICAgICAgICAgICBwMzJbMjEwXSA9IDB4NDIzMzM4Mzc7DQogICAgICAgICAgICBwMzJbMjExXSA9IDB4Mzk0NjMyNDY7DQogICAgICAgICAgICBwMzJbMjEyXSA9IDB4Mzc0MjM2MzY7DQogICAgICAgICAgICBwMzJbMjEzXSA9IDB4MzA0MzQzNDY7DQogICAgICAgICAgICBwMzJbMjE0XSA9IDB4NDYzODM0MzE7DQogICAgICAgICAgICBwMzJbMjE1XSA9IDB4NDEzOTMwMzc7DQogICAgICAgICAgICBwMzJbMjE2XSA9IDB4MzMzMDQ0MzU7DQogICAgICAgICAgICBwMzJbMjE3XSA9IDB4NDMzNTQyNDI7DQogICAgICAgICAgICBwMzJbMjE4XSA9IDB4MzgzODQyMzk7DQogICAgICAgICAgICBwMzJbMjE5XSA9IDB4MzQ0MzM5Mzk7DQogICAgICAgICAgICBwMzJbMjIwXSA9IDB4NDI0NTQxMzc7DQogICAgICAgICAgICBwMzJbMjIxXSA9IDB4NDI0NjM2NDI7DQogICAgICAgICAgICBwMzJbMjIyXSA9IDB4Mzk0NTMxMzc7DQogICAgICAgICAgICBwMzJbMjIzXSA9IDB4MzYzODMzMzE7DQogICAgICAgICAgICBwMzJbMjI0XSA9IDB4MDAzOTMwMzQ7DQogICAgICAgICAgICBmb3IoaSA9IDIyNTsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAyMDk7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMjA7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMjA7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMjA7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9CXzE2MzoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYTsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAyOTsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxMTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMTJdID0gMHgwMDAwMDAzMTsNCiAgICAgICAgICAgIGZvcihpID0gMTM7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MTMwMzI7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4MzAzOTMxMzA7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjMzODYyMzc7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjMzMzM1Mzk7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzgzNDMxNjE7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzE2MjY1MzE7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzIzMTM1MzA7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzczODM3NjY7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzM2MTM0MzQ7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjYzNTMwMzI7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MDAwMDAwNjQ7DQogICAgICAgICAgICBmb3IoaSA9IDQ5OyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDY1MzA2NjMzOw0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM2MzE2MTYyOw0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDYxMzYzODMyOw0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDM3MzU2NDMyOw0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDM5MzA2MTY1Ow0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzEzMTM5Ow0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM5MzQ2NDM4Ow0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMzMzYzNDM5Ow0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzMzg2NTM3Ow0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDMzNjUzMzM0Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDAwMDAwMDM2Ow0KICAgICAgICAgICAgZm9yKGkgPSA4NTsgaSA8PSAxMDk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzEzNTY0MzA7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4MzY2MzYyNjY7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4NjEzMTM3NjM7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzQzOTMwMzA7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjMzMjYxNjY7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzQzNTY0NjQ7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzEzMTYyMzU7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzA2MzM1NjM7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzczOTM3NjM7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjYzNDMyMzM7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4MDAwMDAwMzE7DQogICAgICAgICAgICBmb3IoaSA9IDEyMTsgaSA8PSAxNDU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7DQogICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwMzE7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzQ7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTY7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTk3XSA9IDB4NDYzMjM5MzI7DQogICAgICAgICAgICBwMzJbMTk4XSA9IDB4NDUzNzM3NDU7DQogICAgICAgICAgICBwMzJbMTk5XSA9IDB4MzE0MzMwMzc7DQogICAgICAgICAgICBwMzJbMjAwXSA9IDB4MzIzNDQxMzI7DQogICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzM0MzM0MzM7DQogICAgICAgICAgICBwMzJbMjAyXSA9IDB4MDAwMDAwMzM7DQogICAgICAgICAgICBmb3IoaSA9IDIwMzsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAwYTM7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMDc7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDY7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDM7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9CXzIzMzoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYjsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAzYjsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMTZdID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMTc7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzYzNjM2MzA7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjQ2NTM3MzQ7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzM2MzM2NjU7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4Mzc2MzMyMzM7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzA2MzM4NjY7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4NjIzMzMyMzk7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzIzODM1NjI7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzM2MjMzMzE7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzI2MjMzMzM7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjMzOTY1MzA7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzgzMjM0NjU7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzE2NTY2MzE7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4Mzc2NjM1MzE7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4Mzk2NjM4NjQ7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MDA2NDYxMzA7DQogICAgICAgICAgICBmb3IoaSA9IDUzOyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDYzNjE2NjMwOw0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDYzNjY2NDM5Ow0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDM4NjM2MTYyOw0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDYyMzMzMTMzOw0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMzMzEzMjYyOw0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDYyMzE2NjM5Ow0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM1MzUzNzYyOw0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM2NjY2NTY2Ow0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMzNjM2MjM1Ow0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDM4NjYzMTM5Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDY2MzYzMzYyOw0KICAgICAgICAgICAgcDMyWyA4NV0gPSAweDY1Mzg2NjM4Ow0KICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM3MzMzNzYyOw0KICAgICAgICAgICAgcDMyWyA4N10gPSAweDM1NjQ2NjMxOw0KICAgICAgICAgICAgcDMyWyA4OF0gPSAweDAwNjIzODM1Ow0KICAgICAgICAgICAgZm9yKGkgPSA4OTsgaSA8PSAxMDk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzYzMDMwMzE7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4NjEzODMwNjE7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzAzOTMxMzQ7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzAzNTMzMzM7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjUzODM3MzY7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzIzNTM4MzU7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4NjI2NTYyMzg7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzA2MTM4NjY7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjY2NjY1NjI7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjEzNzM2Mzg7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzM2MTYzMzc7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzYzMTM3MzY7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzA2NTM3NjY7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzEzODY2MzE7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4MDAzMjM1MzA7DQogICAgICAgICAgICBmb3IoaSA9IDEyNTsgaSA8PSAxNDU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7DQogICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNDY7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4MzAzMDMwMzE7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTg7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTk5XSA9IDB4NDUzMzMxMzA7DQogICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDUzNDM3Mzk7DQogICAgICAgICAgICBwMzJbMjAxXSA9IDB4Mzg0NjMyMzc7DQogICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzIzOTM2NDE7DQogICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzEzMzMwMzI7DQogICAgICAgICAgICBwMzJbMjA0XSA9IDB4MzAzNjMyNDQ7DQogICAgICAgICAgICBwMzJbMjA1XSA9IDB4NDU0NjQzMzM7DQogICAgICAgICAgICBwMzJbMjA2XSA9IDB4MDAzNzQ0MzA7DQogICAgICAgICAgICBmb3IoaSA9IDIwNzsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAwZTk7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwNGE7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwNGE7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwNGE7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9CXzI4MzoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwYzsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA0NzsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxODsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMTldID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMjA7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzY2MjM3MzI7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjM2MTMwMzg7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4MzUzODYyMzg7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjE2NDM2Mzk7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4NjEzNDYxMzU7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzE2MTM4NjY7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzMzMDYxMzk7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4NjM2NjMzMzA7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4NjYzNzM5NjE7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4MzQzNjM3NjQ7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4MzkzMDMzMzU7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4NjEzMjYxNjY7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4MzQzMTM4MzU7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjY2MTM1Mzg7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzMzNjMyMzY7DQogICAgICAgICAgICBwMzJbIDUzXSA9IDB4MzMzMTMzNjU7DQogICAgICAgICAgICBwMzJbIDU0XSA9IDB4NjEzOTM3NjI7DQogICAgICAgICAgICBwMzJbIDU1XSA9IDB4MDAzNTY2MzI7DQogICAgICAgICAgICBmb3IoaSA9IDU2OyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDMzMzk2NjM1Ow0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM4MzUzMjM5Ow0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDY0Mzc2MjY0Ow0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDY1MzAzOTY0Ow0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDM0MzMzOTMxOw0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM3NjMzODY2Ow0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDY0MzA2MjMwOw0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDMyNjM2NTY2Ow0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMyNjQ2NTY1Ow0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDM1Mzg2MjM1Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDYxNjUzNzM1Ow0KICAgICAgICAgICAgcDMyWyA4NV0gPSAweDM4NjMzOTYzOw0KICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDY1MzI2NTMwOw0KICAgICAgICAgICAgcDMyWyA4N10gPSAweDY2MzgzOTMxOw0KICAgICAgICAgICAgcDMyWyA4OF0gPSAweDYyNjQ2MzM4Ow0KICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM4NjQ2MzY1Ow0KICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMyMzE2MjM2Ow0KICAgICAgICAgICAgcDMyWyA5MV0gPSAweDAwMzMzNTMwOw0KICAgICAgICAgICAgZm9yKGkgPSA5MjsgaSA8PSAxMDk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4MzYzNzM2MzM7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4NjYzNDM1Mzg7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzEzNDMyNjU7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4NjI2MzMxMzQ7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjU2NjM4Mzk7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjIzNDY0MzY7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzA2NDMwMzI7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzUzNDYyMzI7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4NjY2NjM2MzE7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzMzMjMwMzc7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4NjQ2NTMwMzU7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzgzMDYyNjQ7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzczNzM2MzI7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzEzODYzMzk7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjQzMDY2MzM7DQogICAgICAgICAgICBwMzJbMTI1XSA9IDB4NjIzNTM0NjY7DQogICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzEzMTM4NjU7DQogICAgICAgICAgICBwMzJbMTI3XSA9IDB4MDAzNDY2MzI7DQogICAgICAgICAgICBmb3IoaSA9IDEyODsgaSA8PSAxNDU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7DQogICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNTU7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzM7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDU0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzMzMDM5NDY7DQogICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzYzNjM5Mzk7DQogICAgICAgICAgICBwMzJbMjAzXSA9IDB4Mzk0MzQ2MzA7DQogICAgICAgICAgICBwMzJbMjA0XSA9IDB4Mzk0MTM4MzM7DQogICAgICAgICAgICBwMzJbMjA1XSA9IDB4MzUzNjMxMzA7DQogICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzIzNDMwNDI7DQogICAgICAgICAgICBwMzJbMjA3XSA9IDB4NDU0MzM3NDE7DQogICAgICAgICAgICBwMzJbMjA4XSA9IDB4NDI0NDQxNDY7DQogICAgICAgICAgICBwMzJbMjA5XSA9IDB4MDAzNzMwMzM7DQogICAgICAgICAgICBmb3IoaSA9IDIxMDsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMWI7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGM7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDc7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDU7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9CXzQwOToNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwZDsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2NzsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAyNjsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMjddID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMjg7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4NjEzMTMyMzA7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4NjMzMjYzMzU7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4Mzk2NTY1Mzg7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4MzU2MjY1NjY7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4Mzk2MjM0NjM7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4MzMzNTM3NjE7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4MzQ2MjM3NjI7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4Mzc2MjM2Mzc7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4MzQzNjY0NjY7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjY2NTMyMzI7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4NjQzMzY2MzE7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4MzQzNzM2NjQ7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjYzMTM2Mzc7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4NjQzOTM5NjE7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzI2MzYxMzY7DQogICAgICAgICAgICBwMzJbIDUzXSA9IDB4NjEzODYzMzc7DQogICAgICAgICAgICBwMzJbIDU0XSA9IDB4MzkzMTYxMzk7DQogICAgICAgICAgICBwMzJbIDU1XSA9IDB4MzczMjYyMzc7DQogICAgICAgICAgICBwMzJbIDU2XSA9IDB4MzIzMjM4MzI7DQogICAgICAgICAgICBwMzJbIDU3XSA9IDB4NjQ2MzM2NjY7DQogICAgICAgICAgICBwMzJbIDU4XSA9IDB4MzU2MTM3MzU7DQogICAgICAgICAgICBwMzJbIDU5XSA9IDB4MzQ2MTYxMzU7DQogICAgICAgICAgICBwMzJbIDYwXSA9IDB4NjEzMDM1NjY7DQogICAgICAgICAgICBwMzJbIDYxXSA9IDB4MzczMTMzNjU7DQogICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzUzMzMxNjI7DQogICAgICAgICAgICBwMzJbIDYzXSA9IDB4MDA2NjM1MzQ7DQogICAgICAgICAgICBmb3IoaSA9IDY0OyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDM0NjQzNTMxOw0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDY0MzAzNjM4Ow0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDY0MzgzODMwOw0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDM0MzM2MjY0Ow0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMwNjIzNjM5Ow0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzAzNjYzOw0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM2MzUzNzM0Ow0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM0MzAzNjMyOw0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDY0NjMzMTM0Ow0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDY2NjEzNDY1Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDMxMzczNzMxOw0KICAgICAgICAgICAgcDMyWyA4NV0gPSAweDYyNjQzNDY0Ow0KICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDY2NjYzMTMwOw0KICAgICAgICAgICAgcDMyWyA4N10gPSAweDMzNjIzNTY1Ow0KICAgICAgICAgICAgcDMyWyA4OF0gPSAweDM5MzU2NTM0Ow0KICAgICAgICAgICAgcDMyWyA4OV0gPSAweDY0MzMzMDM3Ow0KICAgICAgICAgICAgcDMyWyA5MF0gPSAweDM1MzUzMjYzOw0KICAgICAgICAgICAgcDMyWyA5MV0gPSAweDM4MzYzODYxOw0KICAgICAgICAgICAgcDMyWyA5Ml0gPSAweDM4MzEzMTYxOw0KICAgICAgICAgICAgcDMyWyA5M10gPSAweDM1MzEzNTMwOw0KICAgICAgICAgICAgcDMyWyA5NF0gPSAweDYxMzMzMDM2Ow0KICAgICAgICAgICAgcDMyWyA5NV0gPSAweDM2NjI2MTY1Ow0KICAgICAgICAgICAgcDMyWyA5Nl0gPSAweDM0MzkzNzMwOw0KICAgICAgICAgICAgcDMyWyA5N10gPSAweDYyMzQzNTY1Ow0KICAgICAgICAgICAgcDMyWyA5OF0gPSAweDM5MzkzNzYyOw0KICAgICAgICAgICAgcDMyWyA5OV0gPSAweDAwMzc2MTM2Ow0KICAgICAgICAgICAgZm9yKGkgPSAxMDA7IGkgPD0gMTA5OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzExMF0gPSAweDYyMzEzNjMwOw0KICAgICAgICAgICAgcDMyWzExMV0gPSAweDYxNjY2MzMxOw0KICAgICAgICAgICAgcDMyWzExMl0gPSAweDY1NjIzNjYyOw0KICAgICAgICAgICAgcDMyWzExM10gPSAweDMyMzM2NjM1Ow0KICAgICAgICAgICAgcDMyWzExNF0gPSAweDYxNjY2MjYyOw0KICAgICAgICAgICAgcDMyWzExNV0gPSAweDMyMzMzODM3Ow0KICAgICAgICAgICAgcDMyWzExNl0gPSAweDMxNjQ2NTM0Ow0KICAgICAgICAgICAgcDMyWzExN10gPSAweDM3NjEzNjMwOw0KICAgICAgICAgICAgcDMyWzExOF0gPSAweDYyMzYzMzM2Ow0KICAgICAgICAgICAgcDMyWzExOV0gPSAweDYxMzU2MzM5Ow0KICAgICAgICAgICAgcDMyWzEyMF0gPSAweDMxNjQ2MjM3Ow0KICAgICAgICAgICAgcDMyWzEyMV0gPSAweDMwNjQzODM5Ow0KICAgICAgICAgICAgcDMyWzEyMl0gPSAweDYxMzgzNTMxOw0KICAgICAgICAgICAgcDMyWzEyM10gPSAweDM1NjYzNDYxOw0KICAgICAgICAgICAgcDMyWzEyNF0gPSAweDY0MzgzODM0Ow0KICAgICAgICAgICAgcDMyWzEyNV0gPSAweDMzNjYzODMwOw0KICAgICAgICAgICAgcDMyWzEyNl0gPSAweDM0MzEzNTM4Ow0KICAgICAgICAgICAgcDMyWzEyN10gPSAweDY0NjYzMTY2Ow0KICAgICAgICAgICAgcDMyWzEyOF0gPSAweDM0NjIzNDY2Ow0KICAgICAgICAgICAgcDMyWzEyOV0gPSAweDY0MzAzNDY2Ow0KICAgICAgICAgICAgcDMyWzEzMF0gPSAweDMxMzgzMTMyOw0KICAgICAgICAgICAgcDMyWzEzMV0gPSAweDM4MzYzMzYyOw0KICAgICAgICAgICAgcDMyWzEzMl0gPSAweDM2MzM2MzMxOw0KICAgICAgICAgICAgcDMyWzEzM10gPSAweDMwNjE2MjM0Ow0KICAgICAgICAgICAgcDMyWzEzNF0gPSAweDYzMzMzNzMyOw0KICAgICAgICAgICAgcDMyWzEzNV0gPSAweDAwMzYzMDM3Ow0KICAgICAgICAgICAgZm9yKGkgPSAxMzY7IGkgPD0gMTQ1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDdiOw0KICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDMxOw0KICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMjA0OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWzIwNV0gPSAweDQxMzI0NTMxOw0KICAgICAgICAgICAgcDMyWzIwNl0gPSAweDQxMzY0NDQxOw0KICAgICAgICAgICAgcDMyWzIwN10gPSAweDQ2MzIzMTM2Ow0KICAgICAgICAgICAgcDMyWzIwOF0gPSAweDMwMzMzMzMzOw0KICAgICAgICAgICAgcDMyWzIwOV0gPSAweDM1NDU0MjM3Ow0KICAgICAgICAgICAgcDMyWzIxMF0gPSAweDM3MzQ0MTQ2Ow0KICAgICAgICAgICAgcDMyWzIxMV0gPSAweDM5NDMzMzQzOw0KICAgICAgICAgICAgcDMyWzIxMl0gPSAweDMyMzUzMDQ1Ow0KICAgICAgICAgICAgcDMyWzIxM10gPSAweDM4MzMzODQ2Ow0KICAgICAgICAgICAgcDMyWzIxNF0gPSAweDQzMzQzNjMxOw0KICAgICAgICAgICAgcDMyWzIxNV0gPSAweDQ0MzczMzQ0Ow0KICAgICAgICAgICAgcDMyWzIxNl0gPSAweDMxMzI0MTM5Ow0KICAgICAgICAgICAgcDMyWzIxN10gPSAweDAwMzMzNzMxOw0KICAgICAgICAgICAgZm9yKGkgPSAyMTg7IGkgPD0gMjM1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMTk5Ow0KICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDU3Ow0KICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDU3Ow0KICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDU3Ow0KICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgQ1VSVkVfQl81NzE6DQogICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMGU7DQogICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwOGY7DQogICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMzY7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbIDM3XSA9IDB4MDAzMTMwMzA7DQogICAgICAgICAgICBwMzJbIDM4XSA9IDB4MzAzNDY2MzI7DQogICAgICAgICAgICBwMzJbIDM5XSA9IDB4MzI2NTM3NjU7DQogICAgICAgICAgICBwMzJbIDQwXSA9IDB4NjYzMTMyMzI7DQogICAgICAgICAgICBwMzJbIDQxXSA9IDB4NjQzNTM5MzI7DQogICAgICAgICAgICBwMzJbIDQyXSA9IDB4MzczOTMyNjU7DQogICAgICAgICAgICBwMzJbIDQzXSA9IDB4NjIzNzMxMzE7DQogICAgICAgICAgICBwMzJbIDQ0XSA9IDB4NjQzMzY2Mzc7DQogICAgICAgICAgICBwMzJbIDQ1XSA9IDB4MzU2NjMyMzY7DQogICAgICAgICAgICBwMzJbIDQ2XSA9IDB4Mzk2MTM2NjM7DQogICAgICAgICAgICBwMzJbIDQ3XSA9IDB4NjM2NjY2Mzc7DQogICAgICAgICAgICBwMzJbIDQ4XSA9IDB4NjU2MzM4NjI7DQogICAgICAgICAgICBwMzJbIDQ5XSA9IDB4NjMzMTY2NjY7DQogICAgICAgICAgICBwMzJbIDUwXSA9IDB4NjE2MjM2NjQ7DQogICAgICAgICAgICBwMzJbIDUxXSA9IDB4MzQ2NTYzMzg7DQogICAgICAgICAgICBwMzJbIDUyXSA9IDB4MzE2MTM5NjE7DQogICAgICAgICAgICBwMzJbIDUzXSA9IDB4Mzg2NDYxMzg7DQogICAgICAgICAgICBwMzJbIDU0XSA9IDB4NjE2NjY2MzQ7DQogICAgICAgICAgICBwMzJbIDU1XSA9IDB4Mzg2NDYyNjI7DQogICAgICAgICAgICBwMzJbIDU2XSA9IDB4MzU2MTY2NjU7DQogICAgICAgICAgICBwMzJbIDU3XSA9IDB4MzIzMzMzMzk7DQogICAgICAgICAgICBwMzJbIDU4XSA9IDB4NjEzNzY1NjI7DQogICAgICAgICAgICBwMzJbIDU5XSA9IDB4MzUzNzM2NjQ7DQogICAgICAgICAgICBwMzJbIDYwXSA9IDB4MzYzNjYxMzY7DQogICAgICAgICAgICBwMzJbIDYxXSA9IDB4MzQzOTMyNjU7DQogICAgICAgICAgICBwMzJbIDYyXSA9IDB4MzE2NDY2NjE7DQogICAgICAgICAgICBwMzJbIDYzXSA9IDB4Mzc2MTM1Mzg7DQogICAgICAgICAgICBwMzJbIDY0XSA9IDB4MzE2NjY2Mzg7DQogICAgICAgICAgICBwMzJbIDY1XSA9IDB4MzU2MTYxMzI7DQogICAgICAgICAgICBwMzJbIDY2XSA9IDB4MzQ2NTMwMzI7DQogICAgICAgICAgICBwMzJbIDY3XSA9IDB4MzMzNzY1NjQ7DQogICAgICAgICAgICBwMzJbIDY4XSA9IDB4NjM2MTYyMzk7DQogICAgICAgICAgICBwMzJbIDY5XSA9IDB4Mzc2MzMwNjE7DQogICAgICAgICAgICBwMzJbIDcwXSA9IDB4NjY2NTY2NjY7DQogICAgICAgICAgICBwMzJbIDcxXSA9IDB4MzI2NjM3NjY7DQogICAgICAgICAgICBwMzJbIDcyXSA9IDB4MzczNTM1Mzk7DQogICAgICAgICAgICBwMzJbIDczXSA9IDB4MDA2MTM3MzI7DQogICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzAzMzMwMzM7DQogICAgICAgICAgICBwMzJbIDc1XSA9IDB4MzM2NDMxMzA7DQogICAgICAgICAgICBwMzJbIDc2XSA9IDB4MzUzODYyMzQ7DQogICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzYzOTMyMzY7DQogICAgICAgICAgICBwMzJbIDc4XSA9IDB4NjMzNjMxNjM7DQogICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzAzNDY0MzA7DQogICAgICAgICAgICBwMzJbIDgwXSA9IDB4NjQ2MzMzNjQ7DQogICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzAzNTM3Mzc7DQogICAgICAgICAgICBwMzJbIDgyXSA9IDB4NjQzMzM5NjE7DQogICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzkzMjY0MzE7DQogICAgICAgICAgICBwMzJbIDg0XSA9IDB4NjE2NjM1MzU7DQogICAgICAgICAgICBwMzJbIDg1XSA9IDB4NjE2MTMwMzg7DQogICAgICAgICAgICBwMzJbIDg2XSA9IDB4MzAzNDY2MzU7DQogICAgICAgICAgICBwMzJbIDg3XSA9IDB4NjQzODYzNjY7DQogICAgICAgICAgICBwMzJbIDg4XSA9IDB4MzI2MjM3NjI7DQogICAgICAgICAgICBwMzJbIDg5XSA9IDB4NjI2NDYyNjE7DQogICAgICAgICAgICBwMzJbIDkwXSA9IDB4MzMzNTY1NjQ7DQogICAgICAgICAgICBwMzJbIDkxXSA9IDB4NjYzMDM1Mzk7DQogICAgICAgICAgICBwMzJbIDkyXSA9IDB4NjQzMDYzMzQ7DQogICAgICAgICAgICBwMzJbIDkzXSA9IDB4NjMzMzM5MzI7DQogICAgICAgICAgICBwMzJbIDk0XSA9IDB4MzEzNzY0NjQ7DQogICAgICAgICAgICBwMzJbIDk1XSA9IDB4MzUzMzYxMzE7DQogICAgICAgICAgICBwMzJbIDk2XSA9IDB4NjYzNzM2NjI7DQogICAgICAgICAgICBwMzJbIDk3XSA9IDB4MzkzNDMxNjI7DQogICAgICAgICAgICBwMzJbIDk4XSA9IDB4MzY2NTYxMzk7DQogICAgICAgICAgICBwMzJbIDk5XSA9IDB4MzgzMzMwMzA7DQogICAgICAgICAgICBwMzJbMTAwXSA9IDB4NjYzNDMxMzY7DQogICAgICAgICAgICBwMzJbMTAxXSA9IDB4MzQzOTMzMzE7DQogICAgICAgICAgICBwMzJbMTAyXSA9IDB4NjE2NjYyNjE7DQogICAgICAgICAgICBwMzJbMTAzXSA9IDB4NjMzNDYyMzM7DQogICAgICAgICAgICBwMzJbMTA0XSA9IDB4NjQzMDM1Mzg7DQogICAgICAgICAgICBwMzJbMTA1XSA9IDB4NjUzNzMyMzk7DQogICAgICAgICAgICBwMzJbMTA2XSA9IDB4MzczNzY1MzE7DQogICAgICAgICAgICBwMzJbMTA3XSA9IDB4Mzg2MzM5MzY7DQogICAgICAgICAgICBwMzJbMTA4XSA9IDB4MzI2MzY1NjU7DQogICAgICAgICAgICBwMzJbMTA5XSA9IDB4MDAzOTMxNjQ7DQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4NjY2MjM3MzM7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4MzQzMzM3MzI7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4MzY2MTY0MzI7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzY2MjM5MzM7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjY2MzYzNjQ7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4NjI2NTY2NjY7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzY2NDMzMzc7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4MzgzNzY0Mzk7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzI2MzM2NjM7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4MzAzNjYxMzc7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4NjI2MzM5MzA7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4MzE2MTYzNjI7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4NjYzMDM4Mzk7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzMzMzM1Mzg7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4NjUzMTMyMzk7DQogICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzgzNjYxMzg7DQogICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzMzMjM0MzQ7DQogICAgICAgICAgICBwMzJbMTI3XSA9IDB4NjIzMzM0NjU7DQogICAgICAgICAgICBwMzJbMTI4XSA9IDB4MzgzMDYyNjE7DQogICAgICAgICAgICBwMzJbMTI5XSA9IDB4MzYzNzM1NjE7DQogICAgICAgICAgICBwMzJbMTMwXSA9IDB4NjEzMTM5MzI7DQogICAgICAgICAgICBwMzJbMTMxXSA9IDB4MzQ2NjM4NjY7DQogICAgICAgICAgICBwMzJbMTMyXSA9IDB4NjI2MjMxMzY7DQogICAgICAgICAgICBwMzJbMTMzXSA9IDB4NjIzODYxMzI7DQogICAgICAgICAgICBwMzJbMTM0XSA9IDB4MzEzMzM1MzM7DQogICAgICAgICAgICBwMzJbMTM1XSA9IDB4MzA2NjMyNjQ7DQogICAgICAgICAgICBwMzJbMTM2XSA9IDB4NjMzNTM4MzQ7DQogICAgICAgICAgICBwMzJbMTM3XSA9IDB4MzE2MjM5MzE7DQogICAgICAgICAgICBwMzJbMTM4XSA9IDB4NjYzMjY1MzY7DQogICAgICAgICAgICBwMzJbMTM5XSA9IDB4MzYzMTM1MzE7DQogICAgICAgICAgICBwMzJbMTQwXSA9IDB4NjQzMzMyNjU7DQogICAgICAgICAgICBwMzJbMTQxXSA9IDB4MzE2MzMzNjQ7DQogICAgICAgICAgICBwMzJbMTQyXSA9IDB4MzIzODM0NjE7DQogICAgICAgICAgICBwMzJbMTQzXSA9IDB4MzE2NjYxMzc7DQogICAgICAgICAgICBwMzJbMTQ0XSA9IDB4NjM2MTM4NjI7DQogICAgICAgICAgICBwMzJbMTQ1XSA9IDB4MDA2MjM1MzE7DQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7DQogICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwYWM7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzM7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAyMDg7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMjA5XSA9IDB4NDU0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMjEwXSA9IDB4NDMzMTM2MzY7DQogICAgICAgICAgICBwMzJbMjExXSA9IDB4NDYzODMxNDU7DQogICAgICAgICAgICBwMzJbMjEyXSA9IDB4MzkzNTM1NDY7DQogICAgICAgICAgICBwMzJbMjEzXSA9IDB4MzAzMzM3Mzg7DQogICAgICAgICAgICBwMzJbMjE0XSA9IDB4MzkzNTMwMzg7DQogICAgICAgICAgICBwMzJbMjE1XSA9IDB4MzYzODMxNDI7DQogICAgICAgICAgICBwMzJbMjE2XSA9IDB4MzgzMzMyMzg7DQogICAgICAgICAgICBwMzJbMjE3XSA9IDB4NDM0NTMxMzU7DQogICAgICAgICAgICBwMzJbMjE4XSA9IDB4Mzk0NDQ0Mzc7DQogICAgICAgICAgICBwMzJbMjE5XSA9IDB4MzEzMTQxNDM7DQogICAgICAgICAgICBwMzJbMjIwXSA9IDB4NDU0NDMxMzY7DQogICAgICAgICAgICBwMzJbMjIxXSA9IDB4MzU0NDMzMzk7DQogICAgICAgICAgICBwMzJbMjIyXSA9IDB4NDQzNDM3MzE7DQogICAgICAgICAgICBwMzJbMjIzXSA9IDB4Mzg0NTM2MzY7DQogICAgICAgICAgICBwMzJbMjI0XSA9IDB4NDUzMjM4MzM7DQogICAgICAgICAgICBwMzJbMjI1XSA9IDB4MzI0MjQyMzk7DQogICAgICAgICAgICBwMzJbMjI2XSA9IDB4MzQzODQ1NDY7DQogICAgICAgICAgICBwMzJbMjI3XSA9IDB4MDAzNzM0NDU7DQogICAgICAgICAgICBmb3IoaSA9IDIyODsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAyM2I7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGE7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDU7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDI7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9LXzE2MzoNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwNTsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDAyOTsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAxMTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMTJdID0gMHgwMDAwMDAzMTsNCiAgICAgICAgICAgIGZvcihpID0gMTM7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDQ3OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWyA0OF0gPSAweDAwMDAwMDMxOw0KICAgICAgICAgICAgZm9yKGkgPSA0OTsgaSA8PSA3MzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsgNzRdID0gMHgzMTY1NjYzMjsNCiAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNTMwNjMzMzsNCiAgICAgICAgICAgIHAzMlsgNzZdID0gMHg2MjYyMzczMzsNCiAgICAgICAgICAgIHAzMlsgNzddID0gMHg2MTMxMzE2MzsNCiAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzMDYxNjE2MzsNCiAgICAgICAgICAgIHAzMlsgNzldID0gMHgzOTM3NjQzNzsNCiAgICAgICAgICAgIHAzMlsgODBdID0gMHgzNDY1NjQzMzsNCiAgICAgICAgICAgIHAzMlsgODFdID0gMHgzNTY0MzY2NTsNCiAgICAgICAgICAgIHAzMlsgODJdID0gMHgzOTYzMzU2NTsNCiAgICAgICAgICAgIHAzMlsgODNdID0gMHg2NTY1NjUzNDsNCiAgICAgICAgICAgIHAzMlsgODRdID0gMHgwMDAwMDAzODsNCiAgICAgICAgICAgIGZvcihpID0gODU7IGkgPD0gMTA5OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzExMF0gPSAweDMwMzkzODMyOw0KICAgICAgICAgICAgcDMyWzExMV0gPSAweDYyNjYzMDM3Ow0KICAgICAgICAgICAgcDMyWzExMl0gPSAweDMzNjQzNTMwOw0KICAgICAgICAgICAgcDMyWzExM10gPSAweDM1NjY2NjM4Ow0KICAgICAgICAgICAgcDMyWzExNF0gPSAweDMxMzIzMzM4Ow0KICAgICAgICAgICAgcDMyWzExNV0gPSAweDM4NjUzMjY2Ow0KICAgICAgICAgICAgcDMyWzExNl0gPSAweDMzMzUzMDMwOw0KICAgICAgICAgICAgcDMyWzExN10gPSAweDMzMzU2NDM2Ow0KICAgICAgICAgICAgcDMyWzExOF0gPSAweDY0NjM2MzM4Ow0KICAgICAgICAgICAgcDMyWzExOV0gPSAweDY0MzM2MTYxOw0KICAgICAgICAgICAgcDMyWzEyMF0gPSAweDAwMDAwMDM5Ow0KICAgICAgICAgICAgZm9yKGkgPSAxMjE7IGkgPD0gMTQ1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE0Nl0gPSAweDAwMDAwMDQ0Ow0KICAgICAgICAgICAgZm9yKGkgPSAxNDc7IGkgPD0gMTU0OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHg0NjQ2NDY0NjsNCg0KICAgICAgICAgICAgZm9yKGkgPSAxNTU7IGkgPD0gMTU5OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWzE2MF0gPSAweDMxMzAzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSAxNjE7IGkgPD0gMTkwOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzE5MV0gPSAweDAwMDAwMDMxOw0KICAgICAgICAgICAgcDMyWzE5Ml0gPSAweDMwMzAzMDM0Ow0KICAgICAgICAgICAgZm9yKGkgPSAxOTM7IGkgPD0gMTk2OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWzE5N10gPSAweDMwMzEzMDMyOw0KICAgICAgICAgICAgcDMyWzE5OF0gPSAweDQ1MzI0MTM4Ow0KICAgICAgICAgICAgcDMyWzE5OV0gPSAweDMwNDM0MzMwOw0KICAgICAgICAgICAgcDMyWzIwMF0gPSAweDQ2MzkzOTQ0Ow0KICAgICAgICAgICAgcDMyWzIwMV0gPSAweDQ1MzU0MTM4Ow0KICAgICAgICAgICAgcDMyWzIwMl0gPSAweDAwMDAwMDQ2Ow0KICAgICAgICAgICAgZm9yKGkgPSAyMDM7IGkgPD0gMjM1OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWzIzNl0gPSAweDAwMDAwMGEzOw0KICAgICAgICAgICAgcDMyWzIzN10gPSAweDAwMDAwMDA3Ow0KICAgICAgICAgICAgcDMyWzIzOF0gPSAweDAwMDAwMDA2Ow0KICAgICAgICAgICAgcDMyWzIzOV0gPSAweDAwMDAwMDAzOw0KICAgICAgICAgICAgcDMyWzI0MF0gPSAweDAwMDAwMDAxOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgQ1VSVkVfS18yMzM6DQogICAgICAgICAgICBwMzJbICAwXSA9IDB4MDAwMDAwMDY7DQogICAgICAgICAgICBwMzJbICAxXSA9IDB4MDAwMDAwM2I7DQogICAgICAgICAgICBmb3IoaSA9IDI7IGkgPD0gMTU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbIDE2XSA9IDB4MDAzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE3OyBpIDw9IDM3OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgZm9yKGkgPSAzODsgaSA8PSA1MTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgNTJdID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gNTM7IGkgPD0gNzM7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbIDc0XSA9IDB4MzMzMjM3MzE7DQogICAgICAgICAgICBwMzJbIDc1XSA9IDB4Mzg2MTYyMzI7DQogICAgICAgICAgICBwMzJbIDc2XSA9IDB4Mzc2MTMzMzU7DQogICAgICAgICAgICBwMzJbIDc3XSA9IDB4MzEzMzM3NjU7DQogICAgICAgICAgICBwMzJbIDc4XSA9IDB4MzIzMTY2NjE7DQogICAgICAgICAgICBwMzJbIDc5XSA9IDB4MzIzMjY2Mzk7DQogICAgICAgICAgICBwMzJbIDgwXSA9IDB4MzEzNDY2NjY7DQogICAgICAgICAgICBwMzJbIDgxXSA9IDB4MzYzNTM5MzQ7DQogICAgICAgICAgICBwMzJbIDgyXSA9IDB4MzEzNDYxMzM7DQogICAgICAgICAgICBwMzJbIDgzXSA9IDB4MzYzMjYzMzk7DQogICAgICAgICAgICBwMzJbIDg0XSA9IDB4MzAzNTY2NjI7DQogICAgICAgICAgICBwMzJbIDg1XSA9IDB4Mzk2MzM0NjE7DQogICAgICAgICAgICBwMzJbIDg2XSA9IDB4NjU2NTM2NjQ7DQogICAgICAgICAgICBwMzJbIDg3XSA9IDB4MzY2NDYxNjY7DQogICAgICAgICAgICBwMzJbIDg4XSA9IDB4MDAzNjMyMzE7DQogICAgICAgICAgICBmb3IoaSA9IDg5OyBpIDw9IDEwOTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNTYyNjQzMTsNCiAgICAgICAgICAgIHAzMlsxMTFdID0gMHg2NTY0MzczMzsNCiAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzMTM4NjU2MzsNCiAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2NjM3NjIzOTsNCiAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzNTY2MzAzNzsNCiAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzNjYxMzUzNTsNCiAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMjM0NjMzNzsNCiAgICAgICAgICAgIHAzMlsxMTddID0gMHg2MzM4NjEzNzsNCiAgICAgICAgICAgIHAzMlsxMThdID0gMHg2NjYyMzk2NDsNCiAgICAgICAgICAgIHAzMlsxMTldID0gMHg2NTYxMzgzMTsNCiAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNTYyMzk2MjsNCiAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2MzMwNjUzNjsNCiAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNTMwMzEzMTsNCiAgICAgICAgICAgIHAzMlsxMjNdID0gMHg2NTYxNjYzNjsNCiAgICAgICAgICAgIHAzMlsxMjRdID0gMHgwMDMzNjEzNjsNCiAgICAgICAgICAgIGZvcihpID0gMTI1OyBpIDw9IDE0NTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsNCiAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA0NjsNCiAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzODsNCiAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDE5ODsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsxOTldID0gMHg0NDM5MzYzMDsNCiAgICAgICAgICAgIHAzMlsyMDBdID0gMHgzOTQyNDIzNTsNCiAgICAgICAgICAgIHAzMlsyMDFdID0gMHg0MzQyMzUzMTsNCiAgICAgICAgICAgIHAzMlsyMDJdID0gMHg0NTM2MzQ0NDsNCiAgICAgICAgICAgIHAzMlsyMDNdID0gMHg0MTMxNDI0NjsNCiAgICAgICAgICAgIHAzMlsyMDRdID0gMHgzMTQ2MzU0NDsNCiAgICAgICAgICAgIHAzMlsyMDVdID0gMHg0MjQxMzMzNzsNCiAgICAgICAgICAgIHAzMlsyMDZdID0gMHgwMDAwNDY0NDsNCiAgICAgICAgICAgIGZvcihpID0gMjA3OyBpIDw9IDIzNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDBlOTsNCiAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDA0YTsNCiAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDA0YTsNCiAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDA0YTsNCiAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIENVUlZFX0tfMjgzOg0KICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA3Ow0KICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDQ3Ow0KICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDE4OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWyAxOV0gPSAweDAwMzAzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSAyMDsgaSA8PSAzNzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIGZvcihpID0gMzg7IGkgPD0gNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbIDU1XSA9IDB4MDAzMTMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDU2OyBpIDw9IDczOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgwMDAwMDAwMDsNCg0KICAgICAgICAgICAgcDMyWyA3NF0gPSAweDMyMzMzMDM1Ow0KICAgICAgICAgICAgcDMyWyA3NV0gPSAweDM3NjYzMzMxOw0KICAgICAgICAgICAgcDMyWyA3Nl0gPSAweDM0NjE2MzM4Ow0KICAgICAgICAgICAgcDMyWyA3N10gPSAweDMzMzgzODM0Ow0KICAgICAgICAgICAgcDMyWyA3OF0gPSAweDMzNjEzMTY2Ow0KICAgICAgICAgICAgcDMyWyA3OV0gPSAweDM2MzEzODYyOw0KICAgICAgICAgICAgcDMyWyA4MF0gPSAweDM4MzE2NjMyOw0KICAgICAgICAgICAgcDMyWyA4MV0gPSAweDM1MzU2NTM4Ow0KICAgICAgICAgICAgcDMyWyA4Ml0gPSAweDMyNjQ2MzMzOw0KICAgICAgICAgICAgcDMyWyA4M10gPSAweDMyNjYzNTM2Ow0KICAgICAgICAgICAgcDMyWyA4NF0gPSAweDM1MzE2MzMzOw0KICAgICAgICAgICAgcDMyWyA4NV0gPSAweDMxNjEzNzM2Ow0KICAgICAgICAgICAgcDMyWyA4Nl0gPSAweDM2MzczODM2Ow0KICAgICAgICAgICAgcDMyWyA4N10gPSAweDYyMzMzMTM5Ow0KICAgICAgICAgICAgcDMyWyA4OF0gPSAweDYxMzI2MzMwOw0KICAgICAgICAgICAgcDMyWyA4OV0gPSAweDM1MzQzMjYzOw0KICAgICAgICAgICAgcDMyWyA5MF0gPSAweDMyMzkzNDM4Ow0KICAgICAgICAgICAgcDMyWyA5MV0gPSAweDAwMzYzMzM4Ow0KICAgICAgICAgICAgZm9yKGkgPSA5MjsgaSA8PSAxMDk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTEwXSA9IDB4NjQ2MzYzMzE7DQogICAgICAgICAgICBwMzJbMTExXSA9IDB4MzAzODMzNjE7DQogICAgICAgICAgICBwMzJbMTEyXSA9IDB4Mzk2MzMxNjY7DQogICAgICAgICAgICBwMzJbMTEzXSA9IDB4MzgzMTMzNjU7DQogICAgICAgICAgICBwMzJbMTE0XSA9IDB4NjYzMDM5NjQ7DQogICAgICAgICAgICBwMzJbMTE1XSA9IDB4MzA2NDM1Mzk7DQogICAgICAgICAgICBwMzJbMTE2XSA9IDB4MzQzNTY1Mzc7DQogICAgICAgICAgICBwMzJbMTE3XSA9IDB4NjU2NjM2MzI7DQogICAgICAgICAgICBwMzJbMTE4XSA9IDB4MzQ2NTM3Mzg7DQogICAgICAgICAgICBwMzJbMTE5XSA9IDB4NjUzMDYzMzU7DQogICAgICAgICAgICBwMzJbMTIwXSA9IDB4MzQzODMxMzg7DQogICAgICAgICAgICBwMzJbMTIxXSA9IDB4NjUzODM5MzY7DQogICAgICAgICAgICBwMzJbMTIyXSA9IDB4MzYzOTM1MzQ7DQogICAgICAgICAgICBwMzJbMTIzXSA9IDB4MzQzNjMzMzI7DQogICAgICAgICAgICBwMzJbMTI0XSA9IDB4MzEzNDMzNjU7DQogICAgICAgICAgICBwMzJbMTI1XSA9IDB4MzczMTM2MzE7DQogICAgICAgICAgICBwMzJbMTI2XSA9IDB4MzI2NDY0Mzc7DQogICAgICAgICAgICBwMzJbMTI3XSA9IDB4MDAzOTM1MzI7DQogICAgICAgICAgICBmb3IoaSA9IDEyODsgaSA8PSAxNDU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTQ2XSA9IDB4MDAwMDAwNDQ7DQogICAgICAgICAgICBmb3IoaSA9IDE0NzsgaSA8PSAxNTQ7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBmb3IoaSA9IDE1NTsgaSA8PSAxNTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDMwMzAzMDMwOw0KDQogICAgICAgICAgICBwMzJbMTYwXSA9IDB4MzEzMDMwMzA7DQogICAgICAgICAgICBmb3IoaSA9IDE2MTsgaSA8PSAxOTA7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMTkxXSA9IDB4MDAwMDAwNTU7DQogICAgICAgICAgICBwMzJbMTkyXSA9IDB4NDY0NjQ2MzE7DQogICAgICAgICAgICBmb3IoaSA9IDE5MzsgaSA8PSAxOTk7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDQ2NDY0NjQ2Ow0KDQogICAgICAgICAgICBwMzJbMjAwXSA9IDB4NDU0NjQ2NDY7DQogICAgICAgICAgICBwMzJbMjAxXSA9IDB4MzI0NTQxMzk7DQogICAgICAgICAgICBwMzJbMjAyXSA9IDB4MzczMDQ0NDU7DQogICAgICAgICAgICBwMzJbMjAzXSA9IDB4MzIzNzM3MzU7DQogICAgICAgICAgICBwMzJbMjA0XSA9IDB4NDY0NDM1MzY7DQogICAgICAgICAgICBwMzJbMjA1XSA9IDB4Mzk0NjM3NDY7DQogICAgICAgICAgICBwMzJbMjA2XSA9IDB4MzEzNTM0MzQ7DQogICAgICAgICAgICBwMzJbMjA3XSA9IDB4MzEzNjMwNDU7DQogICAgICAgICAgICBwMzJbMjA4XSA9IDB4MzMzNjMxNDU7DQogICAgICAgICAgICBwMzJbMjA5XSA9IDB4MDAzMTM2NDM7DQogICAgICAgICAgICBmb3IoaSA9IDIxMDsgaSA8PSAyMzU7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBwMzJbMjM2XSA9IDB4MDAwMDAxMWI7DQogICAgICAgICAgICBwMzJbMjM3XSA9IDB4MDAwMDAwMGM7DQogICAgICAgICAgICBwMzJbMjM4XSA9IDB4MDAwMDAwMDc7DQogICAgICAgICAgICBwMzJbMjM5XSA9IDB4MDAwMDAwMDU7DQogICAgICAgICAgICBwMzJbMjQwXSA9IDB4MDAwMDAwMDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBDVVJWRV9LXzQwOToNCiAgICAgICAgICAgIHAzMlsgIDBdID0gMHgwMDAwMDAwODsNCiAgICAgICAgICAgIHAzMlsgIDFdID0gMHgwMDAwMDA2NzsNCiAgICAgICAgICAgIGZvcihpID0gMjsgaSA8PSAyNjsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgMjddID0gMHgwMDMwMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMjg7IGkgPD0gMzc7IGkrKykNCiAgICAgICAgICAgICAgICBwMzJbaV0gPSAweDAwMDAwMDAwOw0KDQogICAgICAgICAgICBmb3IoaSA9IDM4OyBpIDw9IDYyOyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWyA2M10gPSAweDAwMzEzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSA2NDsgaSA8PSA3MzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2NjMwMzYzMDsNCiAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNjY2MzUzMDsNCiAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzNDY2MzgzNTsNCiAgICAgICAgICAgIHAzMlsgNzddID0gMHg2MTMxNjMzOTsNCiAgICAgICAgICAgIHAzMlsgNzhdID0gMHg2MjYxMzM2NDsNCiAgICAgICAgICAgIHAzMlsgNzldID0gMHgzMDM5MzgzMTsNCiAgICAgICAgICAgIHAzMlsgODBdID0gMHgzODMxMzc2NjsNCiAgICAgICAgICAgIHAzMlsgODFdID0gMHgzMDMxMzIzNDsNCiAgICAgICAgICAgIHAzMlsgODJdID0gMHgzMDY0NjY2NTsNCiAgICAgICAgICAgIHAzMlsgODNdID0gMHg2NTM3MzgzOTsNCiAgICAgICAgICAgIHAzMlsgODRdID0gMHg2MzM3MzAzMzsNCiAgICAgICAgICAgIHAzMlsgODVdID0gMHgzMjYzMzQzODsNCiAgICAgICAgICAgIHAzMlsgODZdID0gMHg2MzYzNjEzNzsNCiAgICAgICAgICAgIHAzMlsgODddID0gMHg2NjM4NjI2NjsNCiAgICAgICAgICAgIHAzMlsgODhdID0gMHgzNzM2NjYzOTsNCiAgICAgICAgICAgIHAzMlsgODldID0gMHg2MzMyNjM2MzsNCiAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzMTMwMzYzNDsNCiAgICAgICAgICAgIHAzMlsgOTFdID0gMHg2MjY1MzkzODsNCiAgICAgICAgICAgIHAzMlsgOTJdID0gMHg2MTYxNjEzNTsNCiAgICAgICAgICAgIHAzMlsgOTNdID0gMHg2NTMyMzY2MTsNCiAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzMjMyMzI2NTsNCiAgICAgICAgICAgIHAzMlsgOTVdID0gMHg2MjMxNjI2NTsNCiAgICAgICAgICAgIHAzMlsgOTZdID0gMHgzNDM1MzUzMzsNCiAgICAgICAgICAgIHAzMlsgOTddID0gMHg2NTY2NjMzMDsNCiAgICAgICAgICAgIHAzMlsgOThdID0gMHgzMzMyMzAzOTsNCiAgICAgICAgICAgIHAzMlsgOTldID0gMHgwMDM2MzQzNzsNCiAgICAgICAgICAgIGZvcihpID0gMTAwOyBpIDw9IDEwOTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxMTBdID0gMHgzNjMzNjUzMTsNCiAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzMDM1MzAzOTsNCiAgICAgICAgICAgIHAzMlsxMTJdID0gMHgzNDYzMzc2MjsNCiAgICAgICAgICAgIHAzMlsxMTNdID0gMHg2MTMyMzQ2NTsNCiAgICAgICAgICAgIHAzMlsxMTRdID0gMHgzMTYxNjI2MzsNCiAgICAgICAgICAgIHAzMlsxMTVdID0gMHg2MjYzNjE2NDsNCiAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzMjM0MzA2NjsNCiAgICAgICAgICAgIHAzMlsxMTddID0gMHgzMzYzMzkzOTsNCiAgICAgICAgICAgIHAzMlsxMThdID0gMHgzNzMwMzYzNDsNCiAgICAgICAgICAgIHAzMlsxMTldID0gMHgzOTY2MzIzODsNCiAgICAgICAgICAgIHAzMlsxMjBdID0gMHg2MTY1MzgzMTsNCiAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NTM3MzIzNDsNCiAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzNTMyMzMzNjsNCiAgICAgICAgICAgIHAzMlsxMjNdID0gMHg2NTM1MzYzMTsNCiAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzMTYxNjUzOTsNCiAgICAgICAgICAgIHAzMlsxMjVdID0gMHg2NDMzNjUzMDsNCiAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzNjY2MzU2MTsNCiAgICAgICAgICAgIHAzMlsxMjddID0gMHg2NTMyMzQ2MzsNCiAgICAgICAgICAgIHAzMlsxMjhdID0gMHgzNTM1NjMzOTsNCiAgICAgICAgICAgIHAzMlsxMjldID0gMHg2MTM1MzEzMjsNCiAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MTYzMzk2MTsNCiAgICAgICAgICAgIHAzMlsxMzFdID0gMHgzNTYxMzczMjsNCiAgICAgICAgICAgIHAzMlsxMzJdID0gMHg2NTMzMzYzODsNCiAgICAgICAgICAgIHAzMlsxMzNdID0gMHg2NDM4MzQ2MzsNCiAgICAgICAgICAgIHAzMlsxMzRdID0gMHgzMjMwNjUzODsNCiAgICAgICAgICAgIHAzMlsxMzVdID0gMHgwMDYyMzYzODsNCiAgICAgICAgICAgIGZvcihpID0gMTM2OyBpIDw9IDE0NTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsNCiAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDA3YjsNCiAgICAgICAgICAgIHAzMlsxOTJdID0gMHg0NjQ2NDYzNzsNCiAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwMzsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIHAzMlsyMDRdID0gMHg0NTQ2NDY0NjsNCiAgICAgICAgICAgIHAzMlsyMDVdID0gMHgzMzM4NDYzNTsNCiAgICAgICAgICAgIHAzMlsyMDZdID0gMHgzNDQ0MzI0MjsNCiAgICAgICAgICAgIHAzMlsyMDddID0gMHgzMDMyNDE0NTsNCiAgICAgICAgICAgIHAzMlsyMDhdID0gMHg0NTMwMzAzNDsNCiAgICAgICAgICAgIHAzMlsyMDldID0gMHgzNTM1MzQ0MzsNCiAgICAgICAgICAgIHAzMlsyMTBdID0gMHg0NTM1NDQzNzsNCiAgICAgICAgICAgIHAzMlsyMTFdID0gMHgzMzQ1MzM0NDsNCiAgICAgICAgICAgIHAzMlsyMTJdID0gMHg0MTQzMzc0NTsNCiAgICAgICAgICAgIHAzMlsyMTNdID0gMHg0MjM0NDIzNTsNCiAgICAgICAgICAgIHAzMlsyMTRdID0gMHgzMzM4NDMzNTsNCiAgICAgICAgICAgIHAzMlsyMTVdID0gMHgzMDQ1Mzg0MjsNCiAgICAgICAgICAgIHAzMlsyMTZdID0gMHg0NjM1NDUzMTsNCiAgICAgICAgICAgIHAzMlsyMTddID0gMHgwMDAwNDY0MzsNCiAgICAgICAgICAgIGZvcihpID0gMjE4OyBpIDw9IDIzNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDE5OTsNCiAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDA1NzsNCiAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDA1NzsNCiAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDA1NzsNCiAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIENVUlZFX0tfNTcxOg0KICAgICAgICAgICAgcDMyWyAgMF0gPSAweDAwMDAwMDA5Ow0KICAgICAgICAgICAgcDMyWyAgMV0gPSAweDAwMDAwMDhmOw0KICAgICAgICAgICAgZm9yKGkgPSAyOyBpIDw9IDM2OyBpKyspDQogICAgICAgICAgICAgICAgcDMyW2ldID0gMHgzMDMwMzAzMDsNCg0KICAgICAgICAgICAgcDMyWyAzN10gPSAweDAwMzAzMDMwOw0KICAgICAgICAgICAgZm9yKGkgPSAzODsgaSA8PSA3MjsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsgNzNdID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIHAzMlsgNzRdID0gMHg2MjY1MzYzMjsNCiAgICAgICAgICAgIHAzMlsgNzVdID0gMHgzNTM4NjEzNzsNCiAgICAgICAgICAgIHAzMlsgNzZdID0gMHgzMzMyMzkzOTsNCiAgICAgICAgICAgIHAzMlsgNzddID0gMHgzODYzNjI2NjsNCiAgICAgICAgICAgIHAzMlsgNzhdID0gMHgzOTM4MzEzMjsNCiAgICAgICAgICAgIHAzMlsgNzldID0gMHg2NjMxMzMzNjsNCiAgICAgICAgICAgIHAzMlsgODBdID0gMHgzMzMwMzEzODsNCiAgICAgICAgICAgIHAzMlsgODFdID0gMHg2MTM0NjU2NjsNCiAgICAgICAgICAgIHAzMlsgODJdID0gMHg2MTYzMzk2MzsNCiAgICAgICAgICAgIHAzMlsgODNdID0gMHgzMDM3MzkzMjsNCiAgICAgICAgICAgIHAzMlsgODRdID0gMHg2NDMyMzEzMDsNCiAgICAgICAgICAgIHAzMlsgODVdID0gMHgzNjM0NjQzNTsNCiAgICAgICAgICAgIHAzMlsgODZdID0gMHgzODM0MzIzMDsNCiAgICAgICAgICAgIHAzMlsgODddID0gMHgzMDM4MzQzMDsNCiAgICAgICAgICAgIHAzMlsgODhdID0gMHgzMTM0MzgzMTsNCiAgICAgICAgICAgIHAzMlsgODldID0gMHgzNDM0NjE2MzsNCiAgICAgICAgICAgIHAzMlsgOTBdID0gMHgzOTMwMzczMzsNCiAgICAgICAgICAgIHAzMlsgOTFdID0gMHgzOTM0MzgzNTsNCiAgICAgICAgICAgIHAzMlsgOTJdID0gMHgzMDMyNjIzMzsNCiAgICAgICAgICAgIHAzMlsgOTNdID0gMHgzNDM2NjUzNTsNCiAgICAgICAgICAgIHAzMlsgOTRdID0gMHgzMzYxNjQzNzsNCiAgICAgICAgICAgIHAzMlsgOTVdID0gMHg2MjY0MzQzMDsNCiAgICAgICAgICAgIHAzMlsgOTZdID0gMHg2MjY1NjMzNDsNCiAgICAgICAgICAgIHAzMlsgOTddID0gMHg2MjYzMzgzMDsNCiAgICAgICAgICAgIHAzMlsgOThdID0gMHg2MjMxNjQ2MjsNCiAgICAgICAgICAgIHAzMlsgOTldID0gMHgzNDM5MzM2MTsNCiAgICAgICAgICAgIHAzMlsxMDBdID0gMHgzNzM3MzQzOTsNCiAgICAgICAgICAgIHAzMlsxMDFdID0gMHgzOTYyNjYzNjsNCiAgICAgICAgICAgIHAzMlsxMDJdID0gMHgzNDYyMzgzODsNCiAgICAgICAgICAgIHAzMlsxMDNdID0gMHgzNDM3MzEzNzsNCiAgICAgICAgICAgIHAzMlsxMDRdID0gMHgzODYxNjM2NDsNCiAgICAgICAgICAgIHAzMlsxMDVdID0gMHg2NTM3NjMzODsNCiAgICAgICAgICAgIHAzMlsxMDZdID0gMHgzNTM0MzkzMjsNCiAgICAgICAgICAgIHAzMlsxMDddID0gMHg2MTMzMzgzMjsNCiAgICAgICAgICAgIHAzMlsxMDhdID0gMHgzODYzMzEzMDsNCiAgICAgICAgICAgIHAzMlsxMDldID0gMHgwMDMyMzczOTsNCiAgICAgICAgICAgIHAzMlsxMTBdID0gMHg2NDM5MzQzMzsNCiAgICAgICAgICAgIHAzMlsxMTFdID0gMHgzNzMwMzg2MzsNCiAgICAgICAgICAgIHAzMlsxMTJdID0gMHg2MjY2MzQ2NjsNCiAgICAgICAgICAgIHAzMlsxMTNdID0gMHgzNDM3MzM2NjsNCiAgICAgICAgICAgIHAzMlsxMTRdID0gMHg2NTYxMzQ2NjsNCiAgICAgICAgICAgIHAzMlsxMTVdID0gMHgzMzY1NjQ2MTsNCiAgICAgICAgICAgIHAzMlsxMTZdID0gMHgzOTYxNjM2MjsNCiAgICAgICAgICAgIHAzMlsxMTddID0gMHgzNDMxMzMzNTsNCiAgICAgICAgICAgIHAzMlsxMThdID0gMHgzODM1NjQ2NDsNCiAgICAgICAgICAgIHAzMlsxMTldID0gMHgzOTYzNjU2MzsNCiAgICAgICAgICAgIHAzMlsxMjBdID0gMHgzNzMwMzM2NjsNCiAgICAgICAgICAgIHAzMlsxMjFdID0gMHg2NjM0MzU2MTsNCiAgICAgICAgICAgIHAzMlsxMjJdID0gMHgzMTM2NjM2NjsNCiAgICAgICAgICAgIHAzMlsxMjNdID0gMHgzMDYzNjY2NTsNCiAgICAgICAgICAgIHAzMlsxMjRdID0gMHgzODY0MzYzMDsNCiAgICAgICAgICAgIHAzMlsxMjVdID0gMHgzOTYzMzI2MTsNCiAgICAgICAgICAgIHAzMlsxMjZdID0gMHgzNzM5MzQ2NDsNCiAgICAgICAgICAgIHAzMlsxMjddID0gMHg2MTMwNjMzOTsNCiAgICAgICAgICAgIHAzMlsxMjhdID0gMHg2MTM0MzQ2MzsNCiAgICAgICAgICAgIHAzMlsxMjldID0gMHgzNDM3NjE2NTsNCiAgICAgICAgICAgIHAzMlsxMzBdID0gMHg2MjY1NjI2NjsNCiAgICAgICAgICAgIHAzMlsxMzFdID0gMHg2NjM5NjI2MjsNCiAgICAgICAgICAgIHAzMlsxMzJdID0gMHg2MTMyMzczNzsNCiAgICAgICAgICAgIHAzMlsxMzNdID0gMHg2MjYzNjQ2NTsNCiAgICAgICAgICAgIHAzMlsxMzRdID0gMHg2MjMwMzIzNjsNCiAgICAgICAgICAgIHAzMlsxMzVdID0gMHgzNzYxMzEzMDsNCiAgICAgICAgICAgIHAzMlsxMzZdID0gMHg2MTM3NjE2MjsNCiAgICAgICAgICAgIHAzMlsxMzddID0gMHgzMzYyMzE2NjsNCiAgICAgICAgICAgIHAzMlsxMzhdID0gMHgzMzM0MzAzMjsNCiAgICAgICAgICAgIHAzMlsxMzldID0gMHgzNTM4NjMzMDsNCiAgICAgICAgICAgIHAzMlsxNDBdID0gMHgzODM5MzEzOTsNCiAgICAgICAgICAgIHAzMlsxNDFdID0gMHgzMDM2NjYzNDsNCiAgICAgICAgICAgIHAzMlsxNDJdID0gMHgzNDY0NjMzMTsNCiAgICAgICAgICAgIHAzMlsxNDNdID0gMHgzMzM0MzE2MzsNCiAgICAgICAgICAgIHAzMlsxNDRdID0gMHg2MzMxNjY2NTsNCiAgICAgICAgICAgIHAzMlsxNDVdID0gMHgwMDMzNjEzNzsNCiAgICAgICAgICAgIHAzMlsxNDZdID0gMHgwMDAwMDA0NDsNCiAgICAgICAgICAgIGZvcihpID0gMTQ3OyBpIDw9IDE1NDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4NDY0NjQ2NDY7DQoNCiAgICAgICAgICAgIGZvcihpID0gMTU1OyBpIDw9IDE1OTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsxNjBdID0gMHgzMTMwMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMTYxOyBpIDw9IDE5MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsxOTFdID0gMHgwMDAwMDBhYzsNCiAgICAgICAgICAgIHAzMlsxOTJdID0gMHgzMDMwMzAzMjsNCiAgICAgICAgICAgIGZvcihpID0gMTkzOyBpIDw9IDIwODsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MzAzMDMwMzA7DQoNCiAgICAgICAgICAgIHAzMlsyMDldID0gMHgzMTMwMzAzMDsNCiAgICAgICAgICAgIHAzMlsyMTBdID0gMHgzNTM4MzEzMzsNCiAgICAgICAgICAgIHAzMlsyMTFdID0gMHg0NjMxNDUzMDsNCiAgICAgICAgICAgIHAzMlsyMTJdID0gMHgzNjQxMzkzMTsNCiAgICAgICAgICAgIHAzMlsyMTNdID0gMHg0MjM0NDUzMzsNCiAgICAgICAgICAgIHAzMlsyMTRdID0gMHg0MTMxMzkzMzsNCiAgICAgICAgICAgIHAzMlsyMTVdID0gMHgzOTQyNDQzODsNCiAgICAgICAgICAgIHAzMlsyMTZdID0gMHgzNDQ2MzczMTsNCiAgICAgICAgICAgIHAzMlsyMTddID0gMHg0MjM4MzMzMTsNCiAgICAgICAgICAgIHAzMlsyMThdID0gMHg0NDMwMzMzNjsNCiAgICAgICAgICAgIHAzMlsyMTldID0gMHg0NTQyMzQzODsNCiAgICAgICAgICAgIHAzMlsyMjBdID0gMHgzMzM2NDQzNTsNCiAgICAgICAgICAgIHAzMlsyMjFdID0gMHgzMTM4MzMzOTsNCiAgICAgICAgICAgIHAzMlsyMjJdID0gMHg0NDMxMzk0NTsNCiAgICAgICAgICAgIHAzMlsyMjNdID0gMHgzNTM0NDI0NTsNCiAgICAgICAgICAgIHAzMlsyMjRdID0gMHgzNzQ1NDY0MzsNCiAgICAgICAgICAgIHAzMlsyMjVdID0gMHgzNjQ2MzgzNzsNCiAgICAgICAgICAgIHAzMlsyMjZdID0gMHgzMTQzMzczMzsNCiAgICAgICAgICAgIHAzMlsyMjddID0gMHgwMDMxMzAzMDsNCiAgICAgICAgICAgIGZvcihpID0gMjI4OyBpIDw9IDIzNTsgaSsrKQ0KICAgICAgICAgICAgICAgIHAzMltpXSA9IDB4MDAwMDAwMDA7DQoNCiAgICAgICAgICAgIHAzMlsyMzZdID0gMHgwMDAwMDIzYjsNCiAgICAgICAgICAgIHAzMlsyMzddID0gMHgwMDAwMDAwYTsNCiAgICAgICAgICAgIHAzMlsyMzhdID0gMHgwMDAwMDAwNTsNCiAgICAgICAgICAgIHAzMlsyMzldID0gMHgwMDAwMDAwMjsNCiAgICAgICAgICAgIHAzMlsyNDBdID0gMHgwMDAwMDAwMTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgfQ0KDQogICAgcmV0dXJuIDA7DQp9DQoNCg0KDQpzdGF0aWMgRUNDX0NVUlZFICogZ2V0X2N1cnZlKEVfRUNDX0NVUlZFIGVjY19jdXJ2ZSkNCnsNCiAgICB1aW50MzJfdCAgIGk7DQogICAgRUNDX0NVUlZFICAqcmV0ID0gTlVMTDsNCg0KICAgIGlmKEN1cnZlQ3B5KCh1bnNpZ25lZCBpbnQgKikmQ3VydmVfQ29weSwgZWNjX2N1cnZlKSkNCiAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgZWxzZQ0KICAgICAgICByZXR1cm4gJkN1cnZlX0NvcHk7DQoNCn0NCg0KDQojZWxzZQ0Kc3RhdGljIEVDQ19DVVJWRSAqIGdldF9jdXJ2ZShFX0VDQ19DVVJWRSBlY2NfY3VydmUpDQp7DQogICAgdWludDMyX3QgICBpOw0KICAgIEVDQ19DVVJWRSAgKnJldCA9IE5VTEw7DQoNCiAgICBmb3IoaSA9IDBVTDsgaSA8IHNpemVvZihfQ3VydmUpIC8gc2l6ZW9mKEVDQ19DVVJWRSk7IGkrKykNCiAgICB7DQogICAgICAgIGlmKGVjY19jdXJ2ZSA9PSBfQ3VydmVbaV0uY3VydmVfaWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZDdXJ2ZV9Db3B5LCAmX0N1cnZlW2ldLCBzaXplb2YoRUNDX0NVUlZFKSk7DQogICAgICAgICAgICByZXQgPSAmQ3VydmVfQ29weTsgICAvKiAoRUNDX0NVUlZFICopJl9DdXJ2ZVtpXTsgKi8NCiAgICAgICAgfQ0KICAgICAgICBpZihyZXQgIT0gTlVMTCkNCiAgICAgICAgew0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHJldDsNCn0NCiNlbmRpZg0KDQoNCi8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ1JZUFRPX0VYUE9SVEVEX0ZVTkNUSU9OUyAqLw0KDQovKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENSWVBUT19Ecml2ZXIgKi8NCg0KLypAfSovIC8qIGVuZCBvZiBncm91cCBTdGFuZGFyZF9Ecml2ZXIgKi8NCg0KLyoqKiAoQykgQ09QWVJJR0hUIDIwMTcgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuICoqKi8NCg0K