From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luck, Tony" Date: Tue, 13 May 2003 22:18:48 +0000 Subject: RE: [Linux-ia64] Re: [PATCH] head.S fix for unusual load addrs MIME-Version: 1 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C3199D.A052D24B" Message-Id: List-Id: References: In-Reply-To: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C3199D.A052D24B Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Here's a proof of concept patch (against 2.5.67) that covers most of the features we've been talking about in this thread. This builds and boots both UP and SMP on a Tiger. Kernel text and data are linked into region 5 at address 0xA000000100000000, leaving the bottom 4G of region 5 available for miscellaneous stuff as suggested by David. It will be possible to extend this patch to split text and data into separate sections to allow kernel text replication, but I left that out for now to keep this patch to the bare minimum. This version still uses the __tpa() macro, but converting it to use the ia64_tpa() inline function is just a matter of getting all the types (argument and return value) so that the compiler doesn't spit warnings all over the screen during build. This patch doesn't fixup fs/proc/kcore.c (my old patch didn't apply cleanly ... and much of the changes it would have made are no longer needed as kernel is now at a lower address than modules). Here's a file by file description of the changes: arch/ia64/kernel/efi_stub.S calls to ia64_switch_mode replaced by calls to ia64_switch_mode_phys or ia64_switch_mode_virt as appropriate arch/ia64/kernel/entry.S ia64_switch_to() doesn't need to test whether stack overlaps DTR[0] (it can't, kernel and stack are in different regions now). arch/ia64/kernel/head.S Initialize all the kernel region registers here (we now have to do rr[5] and rr[7], so I moved rr[6] up to the top and dropped the EARLY_PRINTK #ifdef for symmetry). Map itr[0]/dtr[0] based on actual load address. Map dtr[2] to the region 7 address of the stack, and set IA64_KR(CURRENT_STACK) to correct granule number. Replace ia64_switch_mode() from a function that toggles virtual mode on/off with separate functions to go from virt to phys mode, and from phys to virt mode. arch/ia64/kernel/ia64_ksyms.c Export zero_page_memmap_ptr arch/ia64/kernel/ivt.S Provide labels on code that needs to be patched with the physical address of swapper_pg_dir arch/ia64/kernel/mca.c Lots of __pa() need to be __tpa() arch/ia64/kernel/pal.S calls to ia64_switch_mode replaced by calls to ia64_switch_mode_phys or ia64_switch_mode_virt as appropriate arch/ia64/kernel/setup.c Get correct page numbers when marking start/end of kernel. Code to patch ivt.S with physical address of swapper_pg_dir. Pass region 7 virtual address of per-cpu area to ia64_mmu_init() [UP code would have passed a region 5 kernel address, which chokes the __pa() call in ia64_mmu_init()]=09 arch/ia64/kernel/smpboot.c Use __tpa() to get physical address of entry point to start other cpus arch/ia64/mm/init.c free_initmem() needs to be smarter about addresses initialization of rr[5] and rr[6] moved to head.S setup zero_page_memmap_ptr arch/ia64/vmlinux.lds.S Set LOAD_OFFSET to a sane default value for DIG machines, kernel loaded at 64MB ... on machines where this patch is really needed, elilo will have to ignore the load address and put the kernel anyplace there is suitably aligned memory. Use LOAD_OFFSET rather than PAGE_OFFSET throughout the rest of the file. include/asm-ia64/page.h define __tpa() and __imva() macros include/asm-ia64/pgtable.h Move VMALLOC_START up above kernel (region 5 base + 8GB) New definition of ZERO_PAGE uses zero_page_memmap_ptr Drop KERNEL_TR_PAGE_NUM define, it is meaningless now. include/asm-ia64/system.h KERNEL_START moves to region 5 base + 4GB ------_=_NextPart_001_01C3199D.A052D24B Content-Type: application/octet-stream; name="reloc.diff" Content-Transfer-Encoding: base64 Content-Description: reloc.diff Content-Disposition: attachment; filename="reloc.diff" ZGlmZiAtcnUgbDI1NjctcmVmL2FyY2gvaWE2NC9rZXJuZWwvZWZpX3N0dWIuUyBsMjU2Ny1yZWxv Yy9hcmNoL2lhNjQva2VybmVsL2VmaV9zdHViLlMKLS0tIGwyNTY3LXJlZi9hcmNoL2lhNjQva2Vy bmVsL2VmaV9zdHViLlMJTW9uIEFwciAgNyAxMDozMDozMyAyMDAzCisrKyBsMjU2Ny1yZWxvYy9h cmNoL2lhNjQva2VybmVsL2VmaV9zdHViLlMJVGh1IE1heSAgOCAxMzo1MToyNSAyMDAzCkBAIC02 Miw3ICs2Miw3IEBACiAJbW92IGI2PXIyCiAJOzsKIAlhbmRjbSByMTY9bG9jMyxyMTYJCS8vIGdl dCBwc3Igd2l0aCBJVCwgRFQsIGFuZCBSVCBiaXRzIGNsZWFyZWQKLQlici5jYWxsLnNwdGsubWFu eSBycD1pYTY0X3N3aXRjaF9tb2RlCisJYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hf bW9kZV9waHlzCiAucmV0MDoJbW92IG91dDQ9aW41CiAJbW92IG91dDA9aW4xCiAJbW92IG91dDE9 aW4yCkBAIC03Myw3ICs3Myw3IEBACiAJYnIuY2FsbC5zcHRrLm1hbnkgcnA9YjYJCS8vIGNhbGwg dGhlIEVGSSBmdW5jdGlvbgogLnJldDE6CW1vdiBhci5yc2M9MAkJCS8vIHB1dCBSU0UgaW4gZW5m b3JjZWQgbGF6eSwgTEUgbW9kZQogCW1vdiByMTY9bG9jMwotCWJyLmNhbGwuc3B0ay5tYW55IHJw PWlhNjRfc3dpdGNoX21vZGUgLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQorCWJyLmNhbGwuc3B0 ay5tYW55IHJwPWlhNjRfc3dpdGNoX21vZGVfdmlydCAvLyByZXR1cm4gdG8gdmlydHVhbCBtb2Rl CiAucmV0MjoJbW92IGFyLnJzYz1sb2M0CQkJLy8gcmVzdG9yZSBSU0UgY29uZmlndXJhdGlvbgog CW1vdiBhci5wZnM9bG9jMQogCW1vdiBycD1sb2MwCmRpZmYgLXJ1IGwyNTY3LXJlZi9hcmNoL2lh NjQva2VybmVsL2VudHJ5LlMgbDI1NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCi0t LSBsMjU2Ny1yZWYvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCVRodSBNYXkgIDEgMTA6MTk6Mjgg MjAwMworKysgbDI1NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCUZyaSBNYXkgIDkg MTU6MjE6MTUgMjAwMwpAQCAtMTc4LDE1ICsxNzgsMTIgQEAKIAk7OwogCXN0OCBbcjIyXT1zcAkJ CS8vIHNhdmUga2VybmVsIHN0YWNrIHBvaW50ZXIgb2Ygb2xkIHRhc2sKIAlzaHIudSByMjY9cjIw LElBNjRfR1JBTlVMRV9TSElGVAotCXNoci51IHIxNz1yMjAsS0VSTkVMX1RSX1BBR0VfU0hJRlQK LQk7OwotCWNtcC5uZSBwNixwNz1LRVJORUxfVFJfUEFHRV9OVU0scjE3CiAJYWRkcyByMjE9SUE2 NF9UQVNLX1RIUkVBRF9LU1BfT0ZGU0VULGluMAogCTs7CiAJLyoKIAkgKiBJZiB3ZSd2ZSBhbHJl YWR5IG1hcHBlZCB0aGlzIHRhc2sncyBwYWdlLCB3ZSBjYW4gc2tpcCBkb2luZyBpdCBhZ2Fpbi4K IAkgKi8KLShwNikJY21wLmVxIHA3LHA2PXIyNixyMjcKKwljbXAuZXEgcDcscDY9cjI2LHIyNwog KHA2KQlici5jb25kLmRwbnQgLm1hcAogCTs7CiAuZG9uZToKZGlmZiAtcnUgbDI1NjctcmVmL2Fy Y2gvaWE2NC9rZXJuZWwvaGVhZC5TIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5T Ci0tLSBsMjU2Ny1yZWYvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMJVGh1IE1heSAgMSAxMDoxOToy OCAyMDAzCisrKyBsMjU2Ny1yZWxvYy9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwlUdWUgTWF5IDEz IDExOjA1OjUxIDIwMDMKQEAgLTYwLDIyICs2MCw0MiBAQAogCW1vdiByND1yMAogCS5ib2R5CiAK LQkvKgotCSAqIEluaXRpYWxpemUgdGhlIHJlZ2lvbiByZWdpc3RlciBmb3IgcmVnaW9uIDcgYW5k IGluc3RhbGwgYSB0cmFuc2xhdGlvbiByZWdpc3RlcgotCSAqIHRoYXQgbWFwcyB0aGUga2VybmVs J3MgdGV4dCBhbmQgZGF0YToKLQkgKi8KIAlyc20gcHNyLmkgfCBwc3IuaWMKLQltb3YgcjE2PSgo aWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCBQQUdFX09GRlNFVCkgPDwgOCkgfCAoSUE2 NF9HUkFOVUxFX1NISUZUIDw8IDIpKQogCTs7CiAJc3Jsei5pCisJOzsKKwkvKgorCSAqIEluaXRp YWxpemUga2VybmVsIHJlZ2lvbiByZWdpc3RlcnM6CisJICoJcnJbNV06IFZIUFQgZW5hYmxlZCwg cGFnZSBzaXplID0gUEFHRV9TSElGVAorCSAqCXJyWzZdOiBWSFBUIGRpc2FibGVkLCBwYWdlIHNp emUgPSBJQTY0X0dSQU5VTEVfU0hJRlQKKwkgKglycls1XTogVkhQVCBkaXNhYmxlZCwgcGFnZSBz aXplID0gSUE2NF9HUkFOVUxFX1NISUZUCisJICovCisJbW92IHIxNj0oKGlhNjRfcmlkKElBNjRf UkVHSU9OX0lEX0tFUk5FTCwgKDU8PDYxKSkgPDwgOCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDEp CisJbW92bCByMTc9KDU8PDYxKQorCW1vdiByMTg9KChpYTY0X3JpZChJQTY0X1JFR0lPTl9JRF9L RVJORUwsICg2PDw2MSkpIDw8IDgpIHwgKElBNjRfR1JBTlVMRV9TSElGVCA8PCAyKSkKKwltb3Zs IHIxOT0oNjw8NjEpCisJbW92IHIyMD0oKGlhNjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwg KDc8PDYxKSkgPDwgOCkgfCAoSUE2NF9HUkFOVUxFX1NISUZUIDw8IDIpKQorCW1vdmwgcjIxPSg3 PDw2MSkKKwk7OworCW1vdiBycltyMTddPXIxNgorCW1vdiBycltyMTldPXIxOAorCW1vdiByclty MjFdPXIyMAorCTs7CisJLyoKKwkgKiBOb3cgcGluIG1hcHBpbmdzIGludG8gdGhlIFRMQiBmb3Ig a2VybmVsIHRleHQgYW5kIGRhdGEKKwkgKi8KIAltb3YgcjE4PUtFUk5FTF9UUl9QQUdFX1NISUZU PDwyCiAJbW92bCByMTc9S0VSTkVMX1NUQVJUCiAJOzsKLQltb3YgcnJbcjE3XT1yMTYKIAltb3Yg Y3IuaXRpcj1yMTgKIAltb3YgY3IuaWZhPXIxNwogCW1vdiByMTY9SUE2NF9UUl9LRVJORUwKLQlt b3ZsIHIxOD0oKDEgPDwgS0VSTkVMX1RSX1BBR0VfU0hJRlQpIHwgUEFHRV9LRVJORUwpCisJbW92 IHIzPWlwCisJbW92bCByMTg9UEFHRV9LRVJORUwKKwk7OworCWRlcCByMj0wLHIzLDAsS0VSTkVM X1RSX1BBR0VfU0hJRlQKKwk7OworCW9yIHIxOD1yMixyMTgKIAk7OwogCXNybHouaQogCTs7CkBA IC0xMTMsMTYgKzEzMyw2IEBACiAJbW92IGFyLmZwc3I9cjIKIAk7OwogCi0jaWZkZWYgQ09ORklH X0lBNjRfRUFSTFlfUFJJTlRLCi0JbW92IHIzPSg2PDw4KSB8IChJQTY0X0dSQU5VTEVfU0hJRlQ8 PDIpCi0JbW92bCByMj02PDw2MQotCTs7Ci0JbW92IHJyW3IyXT1yMwotCTs7Ci0Jc3Jsei5pCi0J OzsKLSNlbmRpZgotCiAjZGVmaW5lIGlzQVAJcDIJLy8gYXJlIHdlIGFuIEFwcGxpY2F0aW9uIFBy b2Nlc3Nvcj8KICNkZWZpbmUgaXNCUAlwMwkvLyBhcmUgd2UgdGhlIEJvb3RzdHJhcCBQcm9jZXNz b3I/CiAKQEAgLTE0MywxMiArMTUzLDM2IEBACiAJbW92bCByMj1pbml0X3RocmVhZF91bmlvbgog CWNtcC5lcSBpc0JQLGlzQVA9cjAscjAKICNlbmRpZgotCW1vdiByMTY9S0VSTkVMX1RSX1BBR0Vf TlVNCiAJOzsKKwl0cGEgcjM9cjIJCS8vIHIzID09IHBoeXMgYWRkciBvZiB0YXNrIHN0cnVjdAor CS8vIGxvYWQgbWFwcGluZyBmb3Igc3RhY2sgKHZpcnRhZGRyIGluIHIyLCBwaHlzYWRkciBpbiBy MykKKwlyc20gcHNyLmljCisJbW92bCByMTc9UEFHRV9LRVJORUwKKwk7OworCXNybHouZAorCWRl cCByMTg9MCxyMywwLDEyCisJOzsKKwlvciByMTg9cjE3LHIxOAorCWRlcCByMj0tMSxyMyw2MSwz CS8vIElNVkEgb2YgdGFzaworCTs7CisJbW92IHIxNz1ycltyMl0KKwlzaHIudSByMTY9cjMsSUE2 NF9HUkFOVUxFX1NISUZUCisJOzsKKwlkZXAgcjE3PTAscjE3LDgsMjQKKwk7OworCW1vdiBjci5p dGlyPXIxNworCW1vdiBjci5pZmE9cjIKKworCW1vdiByMTk9SUE2NF9UUl9DVVJSRU5UX1NUQUNL CisJOzsKKwlpdHIuZCBkdHJbcjE5XT1yMTgKKwk7OworCXNzbSBwc3IuaWMKKwlzcmx6LmQKKyAg CTs7CiAKIAkvLyBsb2FkIHRoZSAiY3VycmVudCIgcG9pbnRlciAocjEzKSBhbmQgYXIuazYgd2l0 aCB0aGUgY3VycmVudCB0YXNrCiAJbW92IElBNjRfS1IoQ1VSUkVOVCk9cjIJCS8vIHZpcnR1YWwg YWRkcmVzcwotCS8vIGluaXRpYWxpemUgazQgdG8gYSBzYWZlIHZhbHVlICg2NC0xMjhNQiBpcyBt YXBwZWQgYnkgVFJfS0VSTkVMKQogCW1vdiBJQTY0X0tSKENVUlJFTlRfU1RBQ0spPXIxNgogCW1v diByMTM9cjIKIAkvKgpAQCAtNjY1LDE0ICs2OTksMTQgQEAKIEVORChfX2lhNjRfaW5pdF9mcHUp CiAKIC8qCi0gKiBTd2l0Y2ggZXhlY3V0aW9uIG1vZGUgZnJvbSB2aXJ0dWFsIHRvIHBoeXNpY2Fs IG9yIHZpY2UgdmVyc2EuCisgKiBTd2l0Y2ggZXhlY3V0aW9uIG1vZGUgZnJvbSB2aXJ0dWFsIHRv IHBoeXNpY2FsCiAgKgogICogSW5wdXRzOgogICoJcjE2ID0gbmV3IHBzciB0byBlc3RhYmxpc2gK ICAqCiAgKiBOb3RlOiBSU0UgbXVzdCBhbHJlYWR5IGJlIGluIGVuZm9yY2VkIGxhenkgbW9kZQog ICovCi1HTE9CQUxfRU5UUlkoaWE2NF9zd2l0Y2hfbW9kZSkKK0dMT0JBTF9FTlRSWShpYTY0X3N3 aXRjaF9tb2RlX3BoeXMpCiAgewogCWFsbG9jIHIyPWFyLnBmcywwLDAsMCwwCiAJcnNtIHBzci5p IHwgcHNyLmljCQkvLyBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVycnVwdCBjb2xsZWN0aW9u CkBAIC02ODIsMzUgKzcxNiw4NiBAQAogIHsKIAlmbHVzaHJzCQkJCS8vIG11c3QgYmUgZmlyc3Qg aW5zbiBpbiBncm91cAogCXNybHouaQotCXNoci51IHIxOT1yMTUsNjEJCS8vIHIxOSA8LSB0b3Ag MyBiaXRzIG9mIGN1cnJlbnQgSVAKICB9CiAJOzsKIAltb3YgY3IuaXBzcj1yMTYJCQkvLyBzZXQg bmV3IFBTUgotCWFkZCByMz0xZi1pYTY0X3N3aXRjaF9tb2RlLHIxNQotCXhvciByMTU9MHg3LHIx OQkJCS8vIGZsaXAgdGhlIHJlZ2lvbiBiaXRzCisJYWRkIHIzPTFmLWlhNjRfc3dpdGNoX21vZGVf cGh5cyxyMTUKIAogCW1vdiByMTc9YXIuYnNwCiAJbW92IHIxND1ycAkJCS8vIGdldCByZXR1cm4g YWRkcmVzcyBpbnRvIGEgZ2VuZXJhbCByZWdpc3RlcgorCTs7CiAKLQkvLyBzd2l0Y2ggUlNFIGJh Y2tpbmcgc3RvcmU6CisJLy8gZ29pbmcgdG8gcGh5c2ljYWwgbW9kZSwgdXNlIHRwYSB0byB0cmFu c2xhdGUgdmlydC0+cGh5cworCXRwYSByMTc9cjE3CisJdHBhIHIzPXIzCisJdHBhIHNwPXNwCisJ dHBhIHIxND1yMTQKIAk7OwotCWRlcCByMTc9cjE1LHIxNyw2MSwzCQkvLyBtYWtlIGFyLmJzcCBw aHlzaWNhbCBvciB2aXJ0dWFsCisKIAltb3YgcjE4PWFyLnJuYXQJCQkvLyBzYXZlIGFyLnJuYXQK LQk7OwogCW1vdiBhci5ic3BzdG9yZT1yMTcJCS8vIHRoaXMgc3RlcHMgb24gYXIucm5hdAotCWRl cCByMz1yMTUscjMsNjEsMwkJLy8gbWFrZSByZmkgcmV0dXJuIGFkZHJlc3MgcGh5c2ljYWwgb3Ig dmlydHVhbAorCW1vdiBjci5paXA9cjMKKwltb3YgY3IuaWZzPXIwCiAJOzsKKwltb3YgYXIucm5h dD1yMTgJCQkvLyByZXN0b3JlIGFyLnJuYXQKKwlyZmkJCQkJLy8gbXVzdCBiZSBsYXN0IGluc24g aW4gZ3JvdXAKKwk7OworMToJbW92IHJwPXIxNAorCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChp YTY0X3N3aXRjaF9tb2RlX3BoeXMpCisKKy8qCisgKiBTd2l0Y2ggZXhlY3V0aW9uIG1vZGUgZnJv bSBwaHlzaWNhbCB0byB2aXJ0dWFsCisgKgorICogSW5wdXRzOgorICoJcjE2ID0gbmV3IHBzciB0 byBlc3RhYmxpc2gKKyAqCisgKiBOb3RlOiBSU0UgbXVzdCBhbHJlYWR5IGJlIGluIGVuZm9yY2Vk IGxhenkgbW9kZQorICovCitHTE9CQUxfRU5UUlkoaWE2NF9zd2l0Y2hfbW9kZV92aXJ0KQorIHsK KwlhbGxvYyByMj1hci5wZnMsMCwwLDAsMAorCXJzbSBwc3IuaSB8IHBzci5pYwkJLy8gZGlzYWJs ZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHQgY29sbGVjdGlvbgorCW1vdiByMTU9aXAKKyB9CisJ OzsKKyB7CisJZmx1c2hycwkJCQkvLyBtdXN0IGJlIGZpcnN0IGluc24gaW4gZ3JvdXAKKwlzcmx6 LmkKKyB9CisJOzsKKwltb3YgY3IuaXBzcj1yMTYJCQkvLyBzZXQgbmV3IFBTUgorCWFkZCByMz0x Zi1pYTY0X3N3aXRjaF9tb2RlX3ZpcnQscjE1CisKKwltb3YgcjE3PWFyLmJzcAorCW1vdiByMTQ9 cnAJCQkvLyBnZXQgcmV0dXJuIGFkZHJlc3MgaW50byBhIGdlbmVyYWwgcmVnaXN0ZXIKKwk7Owor CisJLy8gZ29pbmcgdG8gdmlydHVhbAorCS8vICAgLSBmb3IgY29kZSBhZGRyZXNzZXMsIHNldCB1 cHBlciBiaXRzIG9mIGFkZHIgdG8gS0VSTkVMX1NUQVJUCisJLy8gICAtIGZvciBzdGFjayBhZGRy ZXNzZXMsIHNldCB1cHBlciAzIGJpdHMgdG8gMHhlLi4uLiBEb250IGNoYW5nZSBhbnkgb2YgdGhl CisJLy8gICAgIGxvd2VyIGJpdHMgc2luY2Ugd2Ugd2FudCBpdCB0byBzdGF5IGlkZW50aXR5IG1h cHBlZAorCW1vdmwgcjE4PUtFUk5FTF9TVEFSVAorCWRlcCByMz0wLHIzLEtFUk5FTF9UUl9QQUdF X1NISUZULDY0LUtFUk5FTF9UUl9QQUdFX1NISUZUCisJZGVwIHIxND0wLHIxNCxLRVJORUxfVFJf UEFHRV9TSElGVCw2NC1LRVJORUxfVFJfUEFHRV9TSElGVAorCWRlcCByMTc9LTEscjE3LDYxLDMg CisJZGVwIHNwPS0xLHNwLDYxLDMgCisJOzsKKwlvciByMz1yMyxyMTgKKwlvciByMTQ9cjE0LHIx OAorCTs7CisKKwltb3YgcjE4PWFyLnJuYXQJCQkvLyBzYXZlIGFyLnJuYXQKKwltb3YgYXIuYnNw c3RvcmU9cjE3CQkvLyB0aGlzIHN0ZXBzIG9uIGFyLnJuYXQKIAltb3YgY3IuaWlwPXIzCiAJbW92 IGNyLmlmcz1yMAotCWRlcCBzcD1yMTUsc3AsNjEsMwkJLy8gbWFrZSBzdGFjayBwb2ludGVyIHBo eXNpY2FsIG9yIHZpcnR1YWwKIAk7OwogCW1vdiBhci5ybmF0PXIxOAkJCS8vIHJlc3RvcmUgYXIu cm5hdAotCWRlcCByMTQ9cjE1LHIxNCw2MSwzCQkvLyBtYWtlIGZ1bmN0aW9uIHJldHVybiBhZGRy ZXNzIHBoeXNpY2FsIG9yIHZpcnR1YWwKIAlyZmkJCQkJLy8gbXVzdCBiZSBsYXN0IGluc24gaW4g Z3JvdXAKIAk7OwogMToJbW92IHJwPXIxNAogCWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChpYTY0 X3N3aXRjaF9tb2RlKQorRU5EKGlhNjRfc3dpdGNoX21vZGVfdmlydCkKIAogI2lmZGVmIENPTkZJ R19JQTY0X0JSTF9FTVUKIApkaWZmIC1ydSBsMjU2Ny1yZWYvYXJjaC9pYTY0L2tlcm5lbC9pYTY0 X2tzeW1zLmMgbDI1NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKLS0tIGwy NTY3LXJlZi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwlUaHUgTWF5ICAxIDEwOjE5OjI4 IDIwMDMKKysrIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCUZyaSBN YXkgIDkgMTU6MjE6MjUgMjAwMwpAQCAtMTQ2LDYgKzE0Niw3IEBACiBFWFBPUlRfU1lNQk9MKGlh NjRfbXYpOwogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKG1hY2h2ZWNfbm9vcCk7CitFWFBPUlRfU1lN Qk9MKHplcm9fcGFnZV9tZW1tYXBfcHRyKTsKICNpZmRlZiBDT05GSUdfUEVSRk1PTgogI2luY2x1 ZGUgPGFzbS9wZXJmbW9uLmg+CiBFWFBPUlRfU1lNQk9MKHBmbV9pbnN0YWxsX2FsdGVybmF0ZV9z eXN3aWRlX3N1YnN5c3RlbSk7CmRpZmYgLXJ1IGwyNTY3LXJlZi9hcmNoL2lhNjQva2VybmVsL2l2 dC5TIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKLS0tIGwyNTY3LXJlZi9hcmNo L2lhNjQva2VybmVsL2l2dC5TCU1vbiBBcHIgIDcgMTA6MzA6NDMgMjAwMworKysgbDI1NjctcmVs b2MvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwlNb24gTWF5IDEyIDEzOjI4OjQ0IDIwMDMKQEAgLTEy Miw4ICsxMjIsMTMgQEAKIAlzaHIudSByMTg9cjIyLFBHRElSX1NISUZUCQkvLyBnZXQgYml0cyAz My02MyBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcwogCTs7CiAocDcpCWRlcCByMTc9cjE3LHIxOSwo UEFHRV9TSElGVC0zKSwzCS8vIHB1dCByZWdpb24gbnVtYmVyIGJpdHMgaW4gcGxhY2UKKwkuZ2xv YmFsIGlhNjRfaXZ0X3BhdGNoMQoraWE2NF9pdnRfcGF0Y2gxOgorewkubWx4IC8vIHdlIHBhdGNo IHRoaXMgYnVuZGxlIHRvIGluY2x1ZGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBzd2FwcGVyX3BnX2Rp cgogCXNybHouZAkJCQkJLy8gZW5zdXJlICJyc20gcHNyLmR0IiBoYXMgdGFrZW4gZWZmZWN0Ci0o cDYpCW1vdmwgcjE5PV9fcGEoc3dhcHBlcl9wZ19kaXIpCQkvLyByZWdpb24gNSBpcyByb290ZWQg YXQgc3dhcHBlcl9wZ19kaXIKKyhwNikJbW92bCByMTk9c3dhcHBlcl9wZ19kaXIJCQkvLyByZWdp b24gNSBpcyByb290ZWQgYXQgc3dhcHBlcl9wZ19kaXIKK30KKwkucHJlZC5yZWwgIm11dGV4Iiwg cDYsIHA3CiAocDYpCXNoci51IHIyMT1yMjEsUEdESVJfU0hJRlQrUEFHRV9TSElGVAogKHA3KQlz aHIudSByMjE9cjIxLFBHRElSX1NISUZUK1BBR0VfU0hJRlQtMwogCTs7CkBAIC00MTUsOCArNDIw LDEzIEBACiAJc2hyLnUgcjE4PXIxNixQR0RJUl9TSElGVAkJLy8gZ2V0IGJpdHMgMzMtNjMgb2Yg ZmF1bHRpbmcgYWRkcmVzcwogCTs7CiAocDcpCWRlcCByMTc9cjE3LHIxOSwoUEFHRV9TSElGVC0z KSwzCS8vIHB1dCByZWdpb24gbnVtYmVyIGJpdHMgaW4gcGxhY2UKLQlzcmx6LmQKLShwNikJbW92 bCByMTk9X19wYShzd2FwcGVyX3BnX2RpcikJCS8vIHJlZ2lvbiA1IGlzIHJvb3RlZCBhdCBzd2Fw cGVyX3BnX2RpcgorCS5nbG9iYWwgaWE2NF9pdnRfcGF0Y2gyCitpYTY0X2l2dF9wYXRjaDI6Cit7 CS5tbHggLy8gd2UgcGF0Y2ggdGhpcyBidW5kbGUgdG8gaW5jbHVkZSBwaHlzaWNhbCBhZGRyZXNz IG9mIHN3YXBwZXJfcGdfZGlyCisJc3Jsei5kCQkJCQkvLyBlbnN1cmUgInJzbSBwc3IuZHQiIGhh cyB0YWtlbiBlZmZlY3QKKyhwNikJbW92bCByMTk9c3dhcHBlcl9wZ19kaXIJCQkvLyByZWdpb24g NSBpcyByb290ZWQgYXQgc3dhcHBlcl9wZ19kaXIKK30KKwkucHJlZC5yZWwgIm11dGV4IiwgcDYs IHA3CiAocDYpCXNoci51IHIyMT1yMjEsUEdESVJfU0hJRlQrUEFHRV9TSElGVAogKHA3KQlzaHIu dSByMjE9cjIxLFBHRElSX1NISUZUK1BBR0VfU0hJRlQtMwogCTs7CmRpZmYgLXJ1IGwyNTY3LXJl Zi9hcmNoL2lhNjQva2VybmVsL21jYS5jIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJuZWwvbWNh LmMKLS0tIGwyNTY3LXJlZi9hcmNoL2lhNjQva2VybmVsL21jYS5jCVRodSBNYXkgIDEgMTA6MTk6 MjggMjAwMworKysgbDI1NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwlGcmkgTWF5ICA5 IDE1OjU2OjUxIDIwMDMKQEAgLTY0MSwxNyArNjQxLDE3IEBACiAKIAlJQTY0X01DQV9ERUJVRygi aWE2NF9tY2FfaW5pdDogcmVnaXN0ZXJlZCBtY2EgcmVuZGV6dm91cyBzcGlubG9vcCBhbmQgd2Fr ZXVwIG1lY2guXG4iKTsKIAotCWlhNjRfbWNfaW5mby5pbWlfbWNhX2hhbmRsZXIgICAgICAgID0g X19wYShtY2FfaGxkbHJfcHRyLT5mcCk7CisJaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxlciAg ICAgICAgPSBfX3RwYShtY2FfaGxkbHJfcHRyLT5mcCk7CiAJLyoKIAkgKiBYWFggLSBkaXNhYmxl IFNBTCBjaGVja3N1bSBieSBzZXR0aW5nIHNpemUgdG8gMDsgc2hvdWxkIGJlCi0JICoJX19wYShp YTY0X29zX21jYV9kaXNwYXRjaF9lbmQpIC0gX19wYShpYTY0X29zX21jYV9kaXNwYXRjaCk7CisJ ICoJX190cGEoaWE2NF9vc19tY2FfZGlzcGF0Y2hfZW5kKSAtIF9fdHBhKGlhNjRfb3NfbWNhX2Rp c3BhdGNoKTsKIAkgKi8KIAlpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVyX3NpemUJPSAwOwog CiAJLyogUmVnaXN0ZXIgdGhlIG9zIG1jYSBoYW5kbGVyIHdpdGggU0FMICovCiAJaWYgKChyYyA9 IGlhNjRfc2FsX3NldF92ZWN0b3JzKFNBTF9WRUNUT1JfT1NfTUNBLAogCQkJCSAgICAgICBpYTY0 X21jX2luZm8uaW1pX21jYV9oYW5kbGVyLAotCQkJCSAgICAgICBtY2FfaGxkbHJfcHRyLT5ncCwK KwkJCQkgICAgICAgX190cGEobWNhX2hsZGxyX3B0ci0+Z3ApLAogCQkJCSAgICAgICBpYTY0X21j X2luZm8uaW1pX21jYV9oYW5kbGVyX3NpemUsCiAJCQkJICAgICAgIDAsIDAsIDApKSkKIAl7CkBA IC02NjEsMTUgKzY2MSwxNSBAQAogCX0KIAogCUlBNjRfTUNBX0RFQlVHKCJpYTY0X21jYV9pbml0 OiByZWdpc3RlcmVkIG9zIG1jYSBoYW5kbGVyIHdpdGggU0FMIGF0IDB4JWx4LCBncCA9IDB4JWx4 XG4iLAotCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxlciwgbWNhX2hsZGxyX3B0 ci0+Z3ApOworCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxlciwgX190cGEobWNh X2hsZGxyX3B0ci0+Z3ApKTsKIAogCS8qCiAJICogWFhYIC0gZGlzYWJsZSBTQUwgY2hlY2tzdW0g Ynkgc2V0dGluZyBzaXplIHRvIDAsIHNob3VsZCBiZQogCSAqIElBNjRfSU5JVF9IQU5ETEVSX1NJ WkUKIAkgKi8KLQlpYTY0X21jX2luZm8uaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyCQk9IF9fcGEo bW9uX2luaXRfcHRyLT5mcCk7CisJaWE2NF9tY19pbmZvLmltaV9tb25hcmNoX2luaXRfaGFuZGxl cgkJPSBfX3RwYShtb25faW5pdF9wdHItPmZwKTsKIAlpYTY0X21jX2luZm8uaW1pX21vbmFyY2hf aW5pdF9oYW5kbGVyX3NpemUJPSAwOwotCWlhNjRfbWNfaW5mby5pbWlfc2xhdmVfaW5pdF9oYW5k bGVyCQk9IF9fcGEoc2xhdmVfaW5pdF9wdHItPmZwKTsKKwlpYTY0X21jX2luZm8uaW1pX3NsYXZl X2luaXRfaGFuZGxlcgkJPSBfX3RwYShzbGF2ZV9pbml0X3B0ci0+ZnApOwogCWlhNjRfbWNfaW5m by5pbWlfc2xhdmVfaW5pdF9oYW5kbGVyX3NpemUJPSAwOwogCiAJSUE2NF9NQ0FfREVCVUcoImlh NjRfbWNhX2luaXQ6IG9zIGluaXQgaGFuZGxlciBhdCAlbHhcbiIsCkBAIC02NzgsMTAgKzY3OCwx MCBAQAogCS8qIFJlZ2lzdGVyIHRoZSBvcyBpbml0IGhhbmRsZXIgd2l0aCBTQUwgKi8KIAlpZiAo KHJjID0gaWE2NF9zYWxfc2V0X3ZlY3RvcnMoU0FMX1ZFQ1RPUl9PU19JTklULAogCQkJCSAgICAg ICBpYTY0X21jX2luZm8uaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyLAotCQkJCSAgICAgICBfX3Bh KGlhNjRfZ2V0X2dwKCkpLAorCQkJCSAgICAgICBfX3RwYShpYTY0X2dldF9ncCgpKSwKIAkJCQkg ICAgICAgaWE2NF9tY19pbmZvLmltaV9tb25hcmNoX2luaXRfaGFuZGxlcl9zaXplLAogCQkJCSAg ICAgICBpYTY0X21jX2luZm8uaW1pX3NsYXZlX2luaXRfaGFuZGxlciwKLQkJCQkgICAgICAgX19w YShpYTY0X2dldF9ncCgpKSwKKwkJCQkgICAgICAgX190cGEoaWE2NF9nZXRfZ3AoKSksCiAJCQkJ ICAgICAgIGlhNjRfbWNfaW5mby5pbWlfc2xhdmVfaW5pdF9oYW5kbGVyX3NpemUpKSkKIAl7CiAJ CXByaW50ayhLRVJOX0VSUiAiaWE2NF9tY2FfaW5pdDogRmFpbGVkIHRvIHJlZ2lzdGVyIG0vcyBp bml0IGhhbmRsZXJzIHdpdGggU0FMLiAiCmRpZmYgLXJ1IGwyNTY3LXJlZi9hcmNoL2lhNjQva2Vy bmVsL3BhbC5TIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJuZWwvcGFsLlMKLS0tIGwyNTY3LXJl Zi9hcmNoL2lhNjQva2VybmVsL3BhbC5TCU1vbiBBcHIgIDcgMTA6MzI6NTcgMjAwMworKysgbDI1 NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9wYWwuUwlGcmkgTWF5ICA5IDE1OjI0OjI3IDIwMDMK QEAgLTE2NCw3ICsxNjQsNyBAQAogCTs7CiAJbW92IGxvYzQ9YXIucnNjCQkJLy8gc2F2ZSBSU0Ug Y29uZmlndXJhdGlvbgogCWRlcC56IGxvYzI9bG9jMiwwLDYxCQkvLyBjb252ZXJ0IHBhbCBlbnRy eSBwb2ludCB0byBwaHlzaWNhbAotCWRlcC56IHI4PXI4LDAsNjEJCS8vIGNvbnZlcnQgcnAgdG8g cGh5c2ljYWwKKwl0cGEgcjg9cjgJCQkvLyBjb252ZXJ0IHJwIHRvIHBoeXNpY2FsCiAJOzsKIAlt b3YgYjcgPSBsb2MyCQkJLy8gaW5zdGFsbCB0YXJnZXQgdG8gYnJhbmNoIHJlZwogCW1vdiBhci5y c2M9MAkJCS8vIHB1dCBSU0UgaW4gZW5mb3JjZWQgbGF6eSwgTEUgbW9kZQpAQCAtMTc0LDEzICsx NzQsMTMgQEAKIAlvciBsb2MzPWxvYzMscjE3CQkvLyBhZGQgaW4gcHNyIHRoZSBiaXRzIHRvIHNl dAogCTs7CiAJYW5kY20gcjE2PWxvYzMscjE2CQkvLyByZW1vdmVzIGJpdHMgdG8gY2xlYXIgZnJv bSBwc3IKLQlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRjaF9tb2RlCisJYnIuY2FsbC5z cHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZV9waHlzCiAucmV0MToJbW92IHJwID0gcjgJCQkv LyBpbnN0YWxsIHJldHVybiBhZGRyZXNzIChwaHlzaWNhbCkKIAlici5jb25kLnNwdGsubWFueSBi NwogMToKIAltb3YgYXIucnNjPTAJCQkvLyBwdXQgUlNFIGluIGVuZm9yY2VkIGxhenksIExFIG1v ZGUKIAltb3YgcjE2PWxvYzMJCQkvLyByMTY9IG9yaWdpbmFsIHBzcgotCWJyLmNhbGwuc3B0ay5t YW55IHJwPWlhNjRfc3dpdGNoX21vZGUgLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQorCWJyLmNh bGwuc3B0ay5tYW55IHJwPWlhNjRfc3dpdGNoX21vZGVfdmlydCAvLyByZXR1cm4gdG8gdmlydHVh bCBtb2RlCiAucmV0MjoKIAltb3YgcHNyLmwgPSBsb2MzCQkvLyByZXN0b3JlIGluaXQgUFNSCiAK QEAgLTIyOCwxMyArMjI4LDEzIEBACiAJbW92IGI3ID0gbG9jMgkJCS8vIGluc3RhbGwgdGFyZ2V0 IHRvIGJyYW5jaCByZWcKIAk7OwogCWFuZGNtIHIxNj1sb2MzLHIxNgkJLy8gcmVtb3ZlcyBiaXRz IHRvIGNsZWFyIGZyb20gcHNyCi0JYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9k ZQorCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlhNjRfc3dpdGNoX21vZGVfcGh5cwogLnJldDY6CiAJ YnIuY2FsbC5zcHRrLm1hbnkgcnA9YjcJCS8vIG5vdyBtYWtlIHRoZSBjYWxsCiAucmV0NzoKIAlt b3YgYXIucnNjPTAJCQkvLyBwdXQgUlNFIGluIGVuZm9yY2VkIGxhenksIExFIG1vZGUKIAltb3Yg cjE2PWxvYzMJCQkvLyByMTY9IG9yaWdpbmFsIHBzcgotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlh NjRfc3dpdGNoX21vZGUJLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQorCWJyLmNhbGwuc3B0ay5t YW55IHJwPWlhNjRfc3dpdGNoX21vZGVfdmlydAkvLyByZXR1cm4gdG8gdmlydHVhbCBtb2RlCiAK IC5yZXQ4Ogltb3YgcHNyLmwgID0gbG9jMwkJLy8gcmVzdG9yZSBpbml0IFBTUgogCW1vdiBhci5w ZnMgPSBsb2MxCmRpZmYgLXJ1IGwyNTY3LXJlZi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgbDI1 NjctcmVsb2MvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCi0tLSBsMjU2Ny1yZWYvYXJjaC9pYTY0 L2tlcm5lbC9zZXR1cC5jCVRodSBNYXkgIDEgMTA6MTk6MjggMjAwMworKysgbDI1NjctcmVsb2Mv YXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCVR1ZSBNYXkgMTMgMTE6MjY6MTIgMjAwMwpAQCAtMjg2 LDggKzI4Niw4IEBACiAJCQkJKyBzdHJsZW4oX192YShpYTY0X2Jvb3RfcGFyYW0tPmNvbW1hbmRf bGluZSkpICsgMSk7CiAJbisrOwogCi0JcnN2ZF9yZWdpb25bbl0uc3RhcnQgPSBLRVJORUxfU1RB UlQ7Ci0JcnN2ZF9yZWdpb25bbl0uZW5kICAgPSBLRVJORUxfRU5EOworCXJzdmRfcmVnaW9uW25d LnN0YXJ0ID0gX19pbXZhKEtFUk5FTF9TVEFSVCk7CisJcnN2ZF9yZWdpb25bbl0uZW5kICAgPSBf X2ltdmEoS0VSTkVMX0VORCk7CiAJbisrOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJE CkBAIC0zNDcsNiArMzQ3LDQ3IEBACiAjZW5kaWYKIH0KIAorLyoKKyAqIFRoZXJlIGFyZSB0d28g cGxhY2VzIGluIHRoZSBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRoIG9mCisgKiB0aGUgZXhjZXB0 aW9uIGhhbmRsaW5nIGNvZGUgd2hlcmUgd2UgbmVlZCB0byBrbm93IHRoZSBwaHlzaWNhbAorICog YWRkcmVzcyBvZiB0aGUgc3dhcHBlcl9wZ19kaXIgc3RydWN0dXJlLiAgVGhpcyByb3V0aW5lCisg KiBwYXRjaGVzIHRoZSAibW92bCIgaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlIHZhbHVlIG5lZWRl ZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0CitwYXRjaF9pdnRfd2l0aF9waHlzX3N3YXBwZXJf cGdfZGlyKHZvaWQpCit7CisJZXh0ZXJuIGNoYXIgaWE2NF9pdnRfcGF0Y2gxW10sIGlhNjRfaXZ0 X3BhdGNoMltdOworCXVuc2lnbmVkIGxvbmcgc3BkID0gX190cGEoc3dhcHBlcl9wZ19kaXIpOwor CXVuc2lnbmVkIGxvbmcgKnA7CisKKwlwID0gKHVuc2lnbmVkIGxvbmcgKilfX2ltdmEoaWE2NF9p dnRfcGF0Y2gxKTsKKworCSpwID0gKCpwICYgMHgzZmZmZmZmZmZmZmZVTCkgfAorCQkoKHNwZCAm IDB4MDAwMDAwZmZmZmMwMDAwMFVMKTw8MjQpOworCXArKzsKKwkqcCA9ICgqcCAmIDB4ZjAwMDA4 MGZmZjgwMDAwMFVMKSB8CisJCSgoc3BkICYgMHg4MDAwMDAwMDAwMDAwMDAwVUwpID4+IDQpICB8 CisJCSgoc3BkICYgMHg3ZmZmZmYwMDAwMDAwMDAwVUwpID4+IDQwKSB8CisJCSgoc3BkICYgMHgw MDAwMDAwMDAwMWYwMDAwVUwpIDw8IDI5KSB8CisJCSgoc3BkICYgMHgwMDAwMDAwMDAwMjAwMDAw VUwpIDw8IDIzKSB8CisJCSgoc3BkICYgMHgwMDAwMDAwMDAwMDBmZjgwVUwpIDw8IDQzKSB8CisJ CSgoc3BkICYgMHgwMDAwMDAwMDAwMDAwMDdmVUwpIDw8IDM2KTsKKworCXAgPSAodW5zaWduZWQg bG9uZyAqKV9faW12YShpYTY0X2l2dF9wYXRjaDIpOworCisJKnAgPSAoKnAgJiAweDNmZmZmZmZm ZmZmZlVMKSB8CisJCSgoc3BkICYgMHgwMDAwMDBmZmZmYzAwMDAwVUwpPDwyNCk7CisJcCsrOwor CSpwID0gKCpwICYgMHhmMDAwMDgwZmZmODAwMDAwVUwpIHwKKwkJKChzcGQgJiAweDgwMDAwMDAw MDAwMDAwMDBVTCkgPj4gNCkgIHwKKwkJKChzcGQgJiAweDdmZmZmZjAwMDAwMDAwMDBVTCkgPj4g NDApIHwKKwkJKChzcGQgJiAweDAwMDAwMDAwMDAxZjAwMDBVTCkgPDwgMjkpIHwKKwkJKChzcGQg JiAweDAwMDAwMDAwMDAyMDAwMDBVTCkgPDwgMjMpIHwKKwkJKChzcGQgJiAweDAwMDAwMDAwMDAw MGZmODBVTCkgPDwgNDMpIHwKKwkJKChzcGQgJiAweDAwMDAwMDAwMDAwMDAwN2ZVTCkgPDwgMzYp OworfQorI2RlZmluZSBQQVRDSF9JVlQoKSBwYXRjaF9pdnRfd2l0aF9waHlzX3N3YXBwZXJfcGdf ZGlyKCkKKwogdm9pZCBfX2luaXQKIHNldHVwX2FyY2ggKGNoYXIgKipjbWRsaW5lX3ApCiB7CkBA IC0zNTUsNiArMzk2LDggQEAKIAogCXVud19pbml0KCk7CiAKKwlQQVRDSF9JVlQoKTsKKwogCSpj bWRsaW5lX3AgPSBfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+Y29tbWFuZF9saW5lKTsKIAlzdHJuY3B5 KHNhdmVkX2NvbW1hbmRfbGluZSwgKmNtZGxpbmVfcCwgc2l6ZW9mKHNhdmVkX2NvbW1hbmRfbGlu ZSkpOwogCXNhdmVkX2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7CQkv KiBmb3Igc2FmZXR5ICovCkBAIC03MTUsNyArNzU4LDcgQEAKIAlpZiAoY3VycmVudC0+bW0pCiAJ CUJVRygpOwogCi0JaWE2NF9tbXVfaW5pdChjcHVfZGF0YSk7CisJaWE2NF9tbXVfaW5pdCgodm9p ZCAqKV9faW12YShjcHVfZGF0YSkpOwogCiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAogCS8q IGluaXRpYWxpemUgZ2xvYmFsIGlhMzIgc3RhdGUgLSBDUjAgYW5kIENSNCAqLwpkaWZmIC1ydSBs MjU2Ny1yZWYvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgbDI1NjctcmVsb2MvYXJjaC9pYTY0 L2tlcm5lbC9zbXBib290LmMKLS0tIGwyNTY3LXJlZi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3Qu YwlUaHUgTWF5ICAxIDEwOjE5OjI4IDIwMDMKKysrIGwyNTY3LXJlbG9jL2FyY2gvaWE2NC9rZXJu ZWwvc21wYm9vdC5jCUZyaSBNYXkgIDkgMTU6NTY6MzMgMjAwMwpAQCAtNTc0LDcgKzU3NCw3IEBA CiAJLyogVGVsbCBTQUwgd2hlcmUgdG8gZHJvcCB0aGUgQVAncy4gICovCiAJYXBfc3RhcnR1cCA9 IChzdHJ1Y3QgZnB0ciAqKSBzdGFydF9hcDsKIAlzYWxfcmV0ID0gaWE2NF9zYWxfc2V0X3ZlY3Rv cnMoU0FMX1ZFQ1RPUl9PU19CT09UX1JFTkRFWiwKLQkJCQkgICAgICAgX19wYShhcF9zdGFydHVw LT5mcCksIF9fcGEoYXBfc3RhcnR1cC0+Z3ApLCAwLCAwLCAwLCAwKTsKKwkJCQkgICAgICAgX190 cGEoYXBfc3RhcnR1cC0+ZnApLCBfX3RwYShhcF9zdGFydHVwLT5ncCksIDAsIDAsIDAsIDApOwog CWlmIChzYWxfcmV0IDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJTTVA6IENhbid0IHNldCBTQUwg QVAgQm9vdCBSZW5kZXp2b3VzOiAlc1xuIiwKIAkJICAgICAgIGlhNjRfc2FsX3N0cmVycm9yKHNh bF9yZXQpKTsKZGlmZiAtcnUgbDI1NjctcmVmL2FyY2gvaWE2NC9tbS9pbml0LmMgbDI1NjctcmVs b2MvYXJjaC9pYTY0L21tL2luaXQuYwotLS0gbDI1NjctcmVmL2FyY2gvaWE2NC9tbS9pbml0LmMJ VGh1IE1heSAgMSAxMDoxOToyOCAyMDAzCisrKyBsMjU2Ny1yZWxvYy9hcmNoL2lhNjQvbW0vaW5p dC5jCVR1ZSBNYXkgMTMgMTE6MjI6NDAgMjAwMwpAQCAtNDcsNiArNDcsOCBAQAogCiBzdGF0aWMg aW50IHBndF9jYWNoZV93YXRlclsyXSA9IHsgMjUsIDUwIH07CiAKK3N0cnVjdCBwYWdlICp6ZXJv X3BhZ2VfbWVtbWFwX3B0cjsJCS8qIG1hcCBlbnRyeSBmb3IgemVybyBwYWdlICovCisKIHZvaWQK IGNoZWNrX3BndF9jYWNoZSAodm9pZCkKIHsKQEAgLTExMiwxNCArMTE0LDE2IEBACiB2b2lkCiBm cmVlX2luaXRtZW0gKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxv bmcgYWRkciwgZWFkZHI7CiAKLQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47 Ci0JZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQ7IGFkZHIgKz0gUEFH RV9TSVpFKSB7CisJYWRkciA9ICh1bnNpZ25lZCBsb25nKV9faW12YSgmX19pbml0X2JlZ2luKTsK KwllYWRkciA9ICh1bnNpZ25lZCBsb25nKV9faW12YSgmX19pbml0X2VuZCk7CisJd2hpbGUgKGFk ZHIgPCBlYWRkcikgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwog CQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOwogCQlmcmVlX3BhZ2UoYWRk cik7CiAJCSsrdG90YWxyYW1fcGFnZXM7CisJCWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIAlwcmlu dGsoS0VSTl9JTkZPICJGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiAlbGRrQiBmcmVlZFxu IiwKIAkgICAgICAgKCZfX2luaXRfZW5kIC0gJl9faW5pdF9iZWdpbikgPj4gMTApOwpAQCAtMjcw LDcgKzI3NCw3IEBACiB2b2lkIF9faW5pdAogaWE2NF9tbXVfaW5pdCAodm9pZCAqbXlfY3B1X2Rh dGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBwc3IsIHJpZCwgcHRhLCBpbXBsX3ZhX2JpdHM7CisJdW5z aWduZWQgbG9uZyBwc3IsIHB0YSwgaW1wbF92YV9iaXRzOwogCWV4dGVybiB2b2lkIF9faW5pdCB0 bGJfaW5pdCAodm9pZCk7CiAjaWZkZWYgQ09ORklHX0RJU0FCTEVfVkhQVAogIwlkZWZpbmUgVkhQ VF9FTkFCTEVfQklUCTAKQEAgLTI3OCwyMSArMjgyLDggQEAKICMJZGVmaW5lIFZIUFRfRU5BQkxF X0JJVAkxCiAjZW5kaWYKIAotCS8qCi0JICogU2V0IHVwIHRoZSBrZXJuZWwgaWRlbnRpdHkgbWFw cGluZyBmb3IgcmVnaW9ucyA2IGFuZCA1LiAgVGhlIG1hcHBpbmcgZm9yIHJlZ2lvbgotCSAqIDcg aXMgc2V0dXAgdXAgaW4gX3N0YXJ0KCkuCi0JICovCisJLyogUGluIG1hcHBpbmcgZm9yIHBlcmNw dSBhcmVhIGludG8gVExCICovCiAJcHNyID0gaWE2NF9jbGVhcl9pYygpOwotCi0JcmlkID0gaWE2 NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUKTsKLQlp YTY0X3NldF9ycihfX0lBNjRfVU5DQUNIRURfT0ZGU0VULCAocmlkIDw8IDgpIHwgKElBNjRfR1JB TlVMRV9TSElGVCA8PCAyKSk7Ci0KLQlyaWQgPSBpYTY0X3JpZChJQTY0X1JFR0lPTl9JRF9LRVJO RUwsIFZNQUxMT0NfU1RBUlQpOwotCWlhNjRfc2V0X3JyKFZNQUxMT0NfU1RBUlQsIChyaWQgPDwg OCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDEpOwotCi0JLyogZW5zdXJlIHJyNiBpcyB1cC10by1k YXRlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIFBFUkNQVV9BRERSIHRyYW5zbGF0aW9uOiAqLwotCWlh NjRfc3Jsel9kKCk7Ci0KIAlpYTY0X2l0cigweDIsIElBNjRfVFJfUEVSQ1BVX0RBVEEsIFBFUkNQ VV9BRERSLAogCQkgcHRlX3ZhbChwZm5fcHRlKF9fcGEobXlfY3B1X2RhdGEpID4+IFBBR0VfU0hJ RlQsIFBBR0VfS0VSTkVMKSksCiAJCSBQRVJDUFVfUEFHRV9TSElGVCk7CkBAIC00OTUsNiArNDg2 LDcgQEAKIAogCWRpc2NvbnRpZ19wYWdpbmdfaW5pdCgpOwogCWVmaV9tZW1tYXBfd2Fsayhjb3Vu dF9wYWdlcywgJm51bV9waHlzcGFnZXMpOworCXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90 b19wYWdlKF9faW12YShlbXB0eV96ZXJvX3BhZ2UpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfRElT Q09OVElHTUVNICovCiB2b2lkCkBAIC01NjcsNiArNTU5LDcgQEAKIAl9CiAJZnJlZV9hcmVhX2lu aXQoem9uZXNfc2l6ZSk7CiAjICBlbmRpZiAvKiAhQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwor CXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90b19wYWdlKF9faW12YShlbXB0eV96ZXJvX3Bh Z2UpKTsKIH0KICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCkBAIC02MzcsNyAr NjMwLDcgQEAKIAkJcGd0X2NhY2hlX3dhdGVyWzFdID0gbnVtX3BndF9wYWdlczsKIAogCS8qIGlu c3RhbGwgdGhlIGdhdGUgcGFnZSBpbiB0aGUgZ2xvYmFsIHBhZ2UgdGFibGU6ICovCi0JcHV0X2dh dGVfcGFnZSh2aXJ0X3RvX3BhZ2UoX19zdGFydF9nYXRlX3NlY3Rpb24pLCBHQVRFX0FERFIpOwor CXB1dF9nYXRlX3BhZ2UodmlydF90b19wYWdlKF9faW12YShfX3N0YXJ0X2dhdGVfc2VjdGlvbikp LCBHQVRFX0FERFIpOwogCiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAogCWlhMzJfZ2R0X2lu aXQoKTsKZGlmZiAtcnUgbDI1NjctcmVmL2FyY2gvaWE2NC92bWxpbnV4Lmxkcy5TIGwyNTY3LXJl bG9jL2FyY2gvaWE2NC92bWxpbnV4Lmxkcy5TCi0tLSBsMjU2Ny1yZWYvYXJjaC9pYTY0L3ZtbGlu dXgubGRzLlMJTW9uIEFwciAgNyAxMDozMjoyNyAyMDAzCisrKyBsMjU2Ny1yZWxvYy9hcmNoL2lh NjQvdm1saW51eC5sZHMuUwlUdWUgTWF5IDEzIDA4OjQ0OjI3IDIwMDMKQEAgLTMsOCArMyw5IEBA CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1 ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jZGVmaW5lIExP QURfT0ZGU0VUIFBBR0VfT0ZGU0VUCisjZGVmaW5lIExPQURfT0ZGU0VUIEtFUk5FTF9TVEFSVCAr IEtFUk5FTF9UUl9QQUdFX1NJWkUKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5o PgogCiBPVVRQVVRfRk9STUFUKCJlbGY2NC1pYTY0LWxpdHRsZSIpCkBAIC0yMywyMiArMjQsMjIg QEAKIAl9CiAKICAgdiA9IFBBR0VfT0ZGU0VUOwkvKiB0aGlzIHN5bWJvbCBpcyBoZXJlIHRvIG1h a2UgZGVidWdnaW5nIGVhc2llci4uLiAqLwotICBwaHlzX3N0YXJ0ID0gX3N0YXJ0IC0gUEFHRV9P RkZTRVQ7CisgIHBoeXNfc3RhcnQgPSBfc3RhcnQgLSBMT0FEX09GRlNFVDsKIAogICAuID0gS0VS TkVMX1NUQVJUOwogCiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKIAotICAudGV4dCA6IEFU KEFERFIoLnRleHQpIC0gUEFHRV9PRkZTRVQpCisgIC50ZXh0IDogQVQoQUREUigudGV4dCkgLSBM T0FEX09GRlNFVCkKICAgICB7CiAJKigudGV4dC5pdnQpCiAJKigudGV4dCkKICAgICB9Ci0gIC50 ZXh0MiA6IEFUKEFERFIoLnRleHQyKSAtIFBBR0VfT0ZGU0VUKQorICAudGV4dDIgOiBBVChBRERS KC50ZXh0MikgLSBMT0FEX09GRlNFVCkKIAl7ICooLnRleHQyKSB9CiAjaWZkZWYgQ09ORklHX1NN UAotICAudGV4dC5sb2NrIDogQVQoQUREUigudGV4dC5sb2NrKSAtIFBBR0VfT0ZGU0VUKQorICAu dGV4dC5sb2NrIDogQVQoQUREUigudGV4dC5sb2NrKSAtIExPQURfT0ZGU0VUKQogCXsgKigudGV4 dC5sb2NrKSB9CiAjZW5kaWYKICAgX2V0ZXh0ID0gLjsKQEAgLTQ3LDE0ICs0OCwxNCBAQAogCiAg IC8qIEV4Y2VwdGlvbiB0YWJsZSAqLwogICAuID0gQUxJR04oMTYpOwotICBfX2V4X3RhYmxlIDog QVQoQUREUihfX2V4X3RhYmxlKSAtIFBBR0VfT0ZGU0VUKQorICBfX2V4X3RhYmxlIDogQVQoQURE UihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKQogCXsKIAkgIF9fc3RhcnRfX19leF90YWJsZSA9 IC47CiAJICAqKF9fZXhfdGFibGUpCiAJICBfX3N0b3BfX19leF90YWJsZSA9IC47CiAJfQogCi0g IF9fbWNraW5sZXlfZTlfYnVuZGxlcyA6IEFUKEFERFIoX19tY2tpbmxleV9lOV9idW5kbGVzKSAt IFBBR0VfT0ZGU0VUKQorICBfX21ja2lubGV5X2U5X2J1bmRsZXMgOiBBVChBRERSKF9fbWNraW5s ZXlfZTlfYnVuZGxlcykgLSBMT0FEX09GRlNFVCkKIAl7CiAJICBfX3N0YXJ0X19fbWNraW5sZXlf ZTlfYnVuZGxlcyA9IC47CiAJICAqKF9fbWNraW5sZXlfZTlfYnVuZGxlcykKQEAgLTY3LDcgKzY4 LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCiAgIC8qIE1hY2hpbmUgVmVj dG9yICovCiAgIC4gPSBBTElHTigxNik7Ci0gIC5tYWNodmVjIDogQVQoQUREUigubWFjaHZlYykg LSBQQUdFX09GRlNFVCkKKyAgLm1hY2h2ZWMgOiBBVChBRERSKC5tYWNodmVjKSAtIExPQURfT0ZG U0VUKQogCXsKIAkgIG1hY2h2ZWNfc3RhcnQgPSAuOwogCSAgKigubWFjaHZlYykKQEAgLTc3LDkg Kzc4LDkgQEAKIAogICAvKiBVbndpbmQgaW5mbyAmIHRhYmxlOiAqLwogICAuID0gQUxJR04oOCk7 Ci0gIC5JQV82NC51bndpbmRfaW5mbyA6IEFUKEFERFIoLklBXzY0LnVud2luZF9pbmZvKSAtIFBB R0VfT0ZGU0VUKQorICAuSUFfNjQudW53aW5kX2luZm8gOiBBVChBRERSKC5JQV82NC51bndpbmRf aW5mbykgLSBMT0FEX09GRlNFVCkKIAl7ICooLklBXzY0LnVud2luZF9pbmZvKikgfQotICAuSUFf NjQudW53aW5kIDogQVQoQUREUiguSUFfNjQudW53aW5kKSAtIFBBR0VfT0ZGU0VUKQorICAuSUFf NjQudW53aW5kIDogQVQoQUREUiguSUFfNjQudW53aW5kKSAtIExPQURfT0ZGU0VUKQogCXsKIAkg IGlhNjRfdW53X3N0YXJ0ID0gLjsKIAkgICooLklBXzY0LnVud2luZCopCkBAIC04OCwyMCArODks MjAgQEAKIAogICBST0RBVEEKIAotICAub3BkIDogQVQoQUREUigub3BkKSAtIFBBR0VfT0ZGU0VU KQorICAub3BkIDogQVQoQUREUigub3BkKSAtIExPQURfT0ZGU0VUKQogCXsgKigub3BkKSB9CiAK ICAgLyogSW5pdGlhbGl6YXRpb24gY29kZSBhbmQgZGF0YTogKi8KIAogICAuID0gQUxJR04oUEFH RV9TSVpFKTsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IEFUKEFERFIoLmlu aXQudGV4dCkgLSBQQUdFX09GRlNFVCkKKyAgLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4 dCkgLSBMT0FEX09GRlNFVCkKIAl7ICooLmluaXQudGV4dCkgfQogCi0gIC5pbml0LmRhdGEgOiBB VChBRERSKC5pbml0LmRhdGEpIC0gUEFHRV9PRkZTRVQpCisgIC5pbml0LmRhdGEgOiBBVChBRERS KC5pbml0LmRhdGEpIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC5pbml0LmRhdGEpIH0KIAotICAuaW5p dC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gUEFHRV9PRkZTRVQpCisgIC5pbml0LnJh bWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkKIAl7CiAJICBfX2luaXRy YW1mc19zdGFydCA9IC47CiAJICAqKC5pbml0LnJhbWZzKQpAQCAtMTA5LDE5ICsxMTAsMTkgQEAK IAl9CiAKICAgIC4gPSBBTElHTigxNik7Ci0gIC5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5z ZXR1cCkgLSBQQUdFX09GRlNFVCkKKyAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVw KSAtIExPQURfT0ZGU0VUKQogICAgICAgICB7CiAJICBfX3NldHVwX3N0YXJ0ID0gLjsKIAkgICoo LmluaXQuc2V0dXApCiAJICBfX3NldHVwX2VuZCA9IC47CiAJfQotICBfX3BhcmFtIDogQVQoQURE UihfX3BhcmFtKSAtIFBBR0VfT0ZGU0VUKQorICBfX3BhcmFtIDogQVQoQUREUihfX3BhcmFtKSAt IExPQURfT0ZGU0VUKQogICAgICAgICB7CiAJICBfX3N0YXJ0X19fcGFyYW0gPSAuOwogCSAgKihf X3BhcmFtKQogCSAgX19zdG9wX19fcGFyYW0gPSAuOwogCX0KLSAgLmluaXRjYWxsLmluaXQgOiBB VChBRERSKC5pbml0Y2FsbC5pbml0KSAtIFBBR0VfT0ZGU0VUKQorICAuaW5pdGNhbGwuaW5pdCA6 IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpCiAJewogCSAgX19pbml0Y2Fs bF9zdGFydCA9IC47CiAJICAqKC5pbml0Y2FsbDEuaW5pdCkKQEAgLTEzNCwxNyArMTM1LDE3IEBA CiAJICBfX2luaXRjYWxsX2VuZCA9IC47CiAJfQogICAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAu OwotICAuY29uX2luaXRjYWxsLmluaXQgOiBBVChBRERSKC5jb25faW5pdGNhbGwuaW5pdCkgLSBQ QUdFX09GRlNFVCkKKyAgLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxs LmluaXQpIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQogICBfX2Nv bl9pbml0Y2FsbF9lbmQgPSAuOwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2Vu ZCA9IC47CiAKICAgLyogVGhlIGluaXRpYWwgdGFzayBhbmQga2VybmVsIHN0YWNrICovCi0gIC5k YXRhLmluaXRfdGFzayA6IEFUKEFERFIoLmRhdGEuaW5pdF90YXNrKSAtIFBBR0VfT0ZGU0VUKQor ICAuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNF VCkKIAl7ICooLmRhdGEuaW5pdF90YXNrKSB9CiAKLSAgLmRhdGEucGFnZV9hbGlnbmVkIDogQVQo QUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gUEFHRV9PRkZTRVQpCisgIC5kYXRhLnBhZ2VfYWxp Z25lZCA6IEFUKEFERFIoLmRhdGEucGFnZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKQogICAgICAg ICB7ICooX19zcGVjaWFsX3BhZ2Vfc2VjdGlvbikKIAkgIF9fc3RhcnRfZ2F0ZV9zZWN0aW9uID0g LjsKIAkgICooLnRleHQuZ2F0ZSkKQEAgLTE1MiwxMyArMTUzLDEzIEBACiAJfQogCiAgIC4gPSBB TElHTihTTVBfQ0FDSEVfQllURVMpOwotICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFE RFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gUEFHRV9PRkZTRVQpCisgIC5kYXRhLmNhY2hl bGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09G RlNFVCkKICAgICAgICAgeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CiAKICAgLyogUGVy LWNwdSBkYXRhOiAqLwogICAuID0gQUxJR04oUEVSQ1BVX1BBR0VfU0laRSk7CiAgIF9fcGh5c19w ZXJfY3B1X3N0YXJ0ID0gLjsKLSAgLmRhdGEucGVyY3B1IFBFUkNQVV9BRERSIDogQVQoX19waHlz X3Blcl9jcHVfc3RhcnQgLSBQQUdFX09GRlNFVCkKKyAgLmRhdGEucGVyY3B1IFBFUkNQVV9BRERS IDogQVQoX19waHlzX3Blcl9jcHVfc3RhcnQgLSBMT0FEX09GRlNFVCkKIAl7CiAJCV9fcGVyX2Nw dV9zdGFydCA9IC47CiAJCSooLmRhdGEucGVyY3B1KQpAQCAtMTY2LDI0ICsxNjcsMjQgQEAKIAl9 CiAgIC4gPSBfX3BoeXNfcGVyX2NwdV9zdGFydCArIFBFUkNQVV9QQUdFX1NJWkU7CS8qIGVuc3Vy ZSBwZXJjcHUgZGF0YSBmaXRzIGludG8gcGVyY3B1IHBhZ2Ugc2l6ZSAqLwogCi0gIC5kYXRhIDog QVQoQUREUiguZGF0YSkgLSBQQUdFX09GRlNFVCkKKyAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAt IExPQURfT0ZGU0VUKQogCXsgKiguZGF0YSkgKiguZ251LmxpbmtvbmNlLmQqKSBDT05TVFJVQ1RP UlMgfQogCiAgIC4gPSBBTElHTigxNik7CiAgIF9fZ3AgPSAuICsgMHgyMDAwMDA7CS8qIGdwIG11 c3QgYmUgMTYtYnl0ZSBhbGlnbmVkIGZvciBleGMuIHRhYmxlICovCiAKLSAgLmdvdCA6IEFUKEFE RFIoLmdvdCkgLSBQQUdFX09GRlNFVCkKKyAgLmdvdCA6IEFUKEFERFIoLmdvdCkgLSBMT0FEX09G RlNFVCkKIAl7ICooLmdvdC5wbHQpICooLmdvdCkgfQogICAvKiBXZSB3YW50IHRoZSBzbWFsbCBk YXRhIHNlY3Rpb25zIHRvZ2V0aGVyLCBzbyBzaW5nbGUtaW5zdHJ1Y3Rpb24gb2Zmc2V0cwogICAg ICBjYW4gYWNjZXNzIHRoZW0gYWxsLCBhbmQgaW5pdGlhbGl6ZWQgZGF0YSBhbGwgYmVmb3JlIHVu aW5pdGlhbGl6ZWQsIHNvCiAgICAgIHdlIGNhbiBzaG9ydGVuIHRoZSBvbi1kaXNrIHNlZ21lbnQg c2l6ZS4gICovCi0gIC5zZGF0YSA6IEFUKEFERFIoLnNkYXRhKSAtIFBBR0VfT0ZGU0VUKQorICAu c2RhdGEgOiBBVChBRERSKC5zZGF0YSkgLSBMT0FEX09GRlNFVCkKIAl7ICooLnNkYXRhKSB9CiAg IF9lZGF0YSAgPSAgLjsKICAgX2JzcyA9IC47Ci0gIC5zYnNzIDogQVQoQUREUiguc2JzcykgLSBQ QUdFX09GRlNFVCkKKyAgLnNic3MgOiBBVChBRERSKC5zYnNzKSAtIExPQURfT0ZGU0VUKQogCXsg Kiguc2JzcykgKiguc2NvbW1vbikgfQotICAuYnNzIDogQVQoQUREUiguYnNzKSAtIFBBR0VfT0ZG U0VUKQorICAuYnNzIDogQVQoQUREUiguYnNzKSAtIExPQURfT0ZGU0VUKQogCXsgKiguYnNzKSAq KENPTU1PTikgfQogCiAgIF9lbmQgPSAuOwpkaWZmIC1ydSBsMjU2Ny1yZWYvaW5jbHVkZS9hc20t aWE2NC9wYWdlLmggbDI1NjctcmVsb2MvaW5jbHVkZS9hc20taWE2NC9wYWdlLmgKLS0tIGwyNTY3 LXJlZi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAlUaHUgTWF5ICAxIDEwOjE5OjI5IDIwMDMKKysr IGwyNTY3LXJlbG9jL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCUZyaSBNYXkgIDkgMTU6NTg6NDUg MjAwMwpAQCAtMTE4LDYgKzExOCw4IEBACiAgKi8KICNkZWZpbmUgX19wYSh4KQkJKHtpYTY0X3Zh IF92OyBfdi5sID0gKGxvbmcpICh4KTsgX3YuZi5yZWcgPSAwOyBfdi5sO30pCiAjZGVmaW5lIF9f dmEoeCkJCSh7aWE2NF92YSBfdjsgX3YubCA9IChsb25nKSAoeCk7IF92LmYucmVnID0gLTE7IF92 LnA7fSkKKyNkZWZpbmUgX190cGEoeCkJKHtpYTY0X3ZhIF92OyBhc20oInRwYSAlMD0lMSIgOiAi PXIiKF92LmwpIDogInIiKHgpKTsgX3YubDt9KQorI2RlZmluZSBfX2ltdmEoeCkJKChsb25nKV9f dmEoX190cGEoeCkpKQogCiAjZGVmaW5lIFJFR0lPTl9OVU1CRVIoeCkJKHtpYTY0X3ZhIF92OyBf di5sID0gKGxvbmcpICh4KTsgX3YuZi5yZWc7fSkKICNkZWZpbmUgUkVHSU9OX09GRlNFVCh4KQko e2lhNjRfdmEgX3Y7IF92LmwgPSAobG9uZykgKHgpOyBfdi5mLm9mZjt9KQpkaWZmIC1ydSBsMjU2 Ny1yZWYvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggbDI1NjctcmVsb2MvaW5jbHVkZS9hc20t aWE2NC9wZ3RhYmxlLmgKLS0tIGwyNTY3LXJlZi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAlU aHUgTWF5ICAxIDEwOjE5OjI5IDIwMDMKKysrIGwyNTY3LXJlbG9jL2luY2x1ZGUvYXNtLWlhNjQv cGd0YWJsZS5oCVR1ZSBNYXkgMTMgMDk6MDI6NTYgMjAwMwpAQCAtMjA1LDcgKzIwNSw3IEBACiAj ZGVmaW5lIFJHTl9NQVBfTElNSVQJKCgxVUwgPDwgKDQqUEFHRV9TSElGVCAtIDEyKSkgLSBQQUdF X1NJWkUpCS8qIHBlciByZWdpb24gYWRkciBsaW1pdCAqLwogI2RlZmluZSBSR05fS0VSTkVMCTcK IAotI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoMHhhMDAwMDAwMDAwMDAwMDAwICsgMypQRVJDUFVf UEFHRV9TSVpFKQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkweGEwMDAwMDAyMDAwMDAwMDAKICNk ZWZpbmUgVk1BTExPQ19WTUFERFIoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSkKICNpZmRlZiBDT05G SUdfVklSVFVBTF9NRU1fTUFQCiAjIGRlZmluZSBWTUFMTE9DX0VORF9JTklUCSgweGEwMDAwMDAw MDAwMDAwMDAgKyAoMVVMIDw8ICg0KlBBR0VfU0hJRlQgLSA5KSkpCkBAIC00NDgsNyArNDQ4LDgg QEAKICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KICAqLwogZXh0ZXJuIHVu c2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9u ZyldOwotI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19w YWdlKSkKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqemVyb19wYWdlX21lbW1hcF9wdHI7CisjZGVmaW5l IFpFUk9fUEFHRSh2YWRkcikgKHplcm9fcGFnZV9tZW1tYXBfcHRyKQogCiAvKiBXZSBwcm92aWRl IG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2Vy bGFuZCAqLwogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQpAQCAtNDg1LDcgKzQ4Niw2 IEBACiAgKi8KICNkZWZpbmUgS0VSTkVMX1RSX1BBR0VfU0hJRlQJX1BBR0VfU0laRV82NE0KICNk ZWZpbmUgS0VSTkVMX1RSX1BBR0VfU0laRQkoMSA8PCBLRVJORUxfVFJfUEFHRV9TSElGVCkKLSNk ZWZpbmUgS0VSTkVMX1RSX1BBR0VfTlVNCSgoS0VSTkVMX1NUQVJUIC0gUEFHRV9PRkZTRVQpIC8g S0VSTkVMX1RSX1BBR0VfU0laRSkKIAogLyoKICAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGlu aXRpYWxpc2UKZGlmZiAtcnUgbDI1NjctcmVmL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmggbDI1 NjctcmVsb2MvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaAotLS0gbDI1NjctcmVmL2luY2x1ZGUv YXNtLWlhNjQvc3lzdGVtLmgJVGh1IE1heSAgMSAxMDoxOToyOSAyMDAzCisrKyBsMjU2Ny1yZWxv Yy9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCUZyaSBNYXkgIDkgMTc6NTY6MTQgMjAwMwpAQCAt MTksNyArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9wYWwuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1 Lmg+CiAKLSNkZWZpbmUgS0VSTkVMX1NUQVJUCQkoUEFHRV9PRkZTRVQgKyA2OCoxMDI0KjEwMjQp CisjZGVmaW5lIEtFUk5FTF9TVEFSVAkJKDB4QTAwMDAwMDEwMDAwMDAwMCkKIAogLyogMHhhMDAw MDAwMDAwMDAwMDAwIC0gMHhhMDAwMDAwMDAwMDAwMDAwK1BFUkNQVV9NQVhfU0laRSByZW1haW4g dW5tYXBwZWQgKi8KICNkZWZpbmUgUEVSQ1BVX0FERFIJCSgweGEwMDAwMDAwMDAwMDAwMDAgKyBQ RVJDUFVfUEFHRV9TSVpFKQo= ------_=_NextPart_001_01C3199D.A052D24B--