From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#10664: 24.0.93; JIT font-lock infloops in a C file Date: Mon, 30 Jan 2012 20:23:49 +0200 Message-ID: <83wr89qcay.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_X4UeYizexOpn37eHUJ41wQ)" X-Trace: dough.gmane.org 1327948021 21907 80.91.229.3 (30 Jan 2012 18:27:01 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 30 Jan 2012 18:27:01 +0000 (UTC) To: 10664@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Jan 30 19:27:00 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RrvwR-00045p-0p for geb-bug-gnu-emacs@m.gmane.org; Mon, 30 Jan 2012 19:27:00 +0100 Original-Received: from localhost ([::1]:53417 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RrvwQ-0004pU-Db for geb-bug-gnu-emacs@m.gmane.org; Mon, 30 Jan 2012 13:26:58 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:51843) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RrvwL-0004p7-Hk for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:56 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RrvwJ-0005bG-Ff for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:53 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41906) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RrvwJ-0005b7-6h for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:51 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1RrvwT-0000dk-RE for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:27:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 30 Jan 2012 18:27:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 10664 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.13279480152446 (code B ref -1); Mon, 30 Jan 2012 18:27:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 30 Jan 2012 18:26:55 +0000 Original-Received: from localhost ([127.0.0.1]:45529 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RrvwL-0000dO-Ox for submit@debbugs.gnu.org; Mon, 30 Jan 2012 13:26:54 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:40820) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RrvwH-0000dA-BJ for submit@debbugs.gnu.org; Mon, 30 Jan 2012 13:26:51 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rrvvu-0005Wk-Gh for submit@debbugs.gnu.org; Mon, 30 Jan 2012 13:26:33 -0500 Original-Received: from lists.gnu.org ([140.186.70.17]:51864) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrvvu-0005Wg-EP for submit@debbugs.gnu.org; Mon, 30 Jan 2012 13:26:26 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:51752) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrvvp-0004X3-7W for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:26 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rrvvi-0005Va-Ae for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:21 -0500 Original-Received: from mtaout22.012.net.il ([80.179.55.172]:63945) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rrvvh-0005V0-94 for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 13:26:14 -0500 Original-Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0LYM00I00J69E800@a-mtaout22.012.net.il> for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 20:25:55 +0200 (IST) Original-Received: from HOME-C4E4A596F7 ([84.229.57.191]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0LYM00ILWJ70AC20@a-mtaout22.012.net.il> for bug-gnu-emacs@gnu.org; Mon, 30 Jan 2012 20:25:51 +0200 (IST) X-012-Sender: halo1@inter.net.il X-detected-operating-system: by eggs.gnu.org: Solaris 10 (beta) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:56238 Archived-At: --Boundary_(ID_X4UeYizexOpn37eHUJ41wQ) Content-type: text/plain This bug report will be sent to the Bug-GNU-Emacs mailing list and the GNU bug tracker at debbugs.gnu.org. Please check that the From: line contains a valid email address. After a delay of up to one day, you should receive an acknowledgement at that address. Please write in English if possible, as the Emacs maintainers usually do not have translators for other languages. Please describe exactly what actions triggered the bug, and the precise symptoms of the bug. If you can, give a recipe starting from `emacs -Q': I don't have a recipe starting from "emacs -Q", sorry. I left my freshly built Emacs 24.0.93 running, and when I returned to it a few hours later, I found it unresponsive, endlessly showing in the echo area "JIT lock socket.c", interspersed with GC messages (I have garbage-collection-messages set non-nil). Breaking into Emacs with a debugger produced the backtrace below (it's an optimized build, so the backtrace may be inaccurate, sorry). I attach the file socket.c (part of the Guile sources) as well. I still have that session in a debugger, so if someone wants me to look around and show some values, I can do that. #0 find_symbol_value (symbol=50731778) at data.c:1044 1044 return do_symval_forwarding (SYMBOL_FWD (sym)); (gdb) bt #0 find_symbol_value (symbol=50731778) at data.c:1044 #1 0x0100fb9b in specbind (symbol=50731778, value=50616370) at eval.c:3322 #2 0x0109f6d5 in exec_byte_code (bytestr=50731778, vector=2, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:747 #3 0x01011a8a in funcall_lambda (fun=69096517, nargs=1, arg_vector=0x82df24) at eval.c:3218 #4 0x01011eed in Ffuncall (nargs=2, args=0x41e5445) at eval.c:3048 #5 0x0109f68c in exec_byte_code (bytestr=50731778, vector=1, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #6 0x0109ff82 in Fbyte_code (bytestr=3, vector=3, maxdepth=3) at bytecode.c:423 #7 0x01011227 in eval_sub (form=20240912) at eval.c:2341 #8 0x0100eef0 in internal_catch (tag=3, func=0x1010ce6 , arg=68864406) at eval.c:1257 #9 0x0109ed60 in exec_byte_code (bytestr=50731778, vector=141, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:966 #10 0x01011a8a in funcall_lambda (fun=68468261, nargs=1, arg_vector=0x82e2d4) at eval.c:3218 #11 0x01011eed in Ffuncall (nargs=2, args=0x414be25) at eval.c:3048 #12 0x0109f68c in exec_byte_code (bytestr=50731778, vector=1, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #13 0x01011a8a in funcall_lambda (fun=69603781, nargs=1, arg_vector=0x82e444) at eval.c:3218 #14 0x01011eed in Ffuncall (nargs=2, args=0x42611c5) at eval.c:3048 #15 0x0109f68c in exec_byte_code (bytestr=50731778, vector=1, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #16 0x01011a8a in funcall_lambda (fun=69603397, nargs=2, arg_vector=0x82e5b4) at eval.c:3218 #17 0x01011eed in Ffuncall (nargs=3, args=0x4261045) at eval.c:3048 #18 0x0109f68c in exec_byte_code (bytestr=50731778, vector=2, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #19 0x01011a8a in funcall_lambda (fun=69619589, nargs=1, arg_vector=0x82e72c) at eval.c:3218 #20 0x01011eed in Ffuncall (nargs=2, args=0x4264f85) at eval.c:3048 #21 0x0101257a in call1 (fn=3, arg1=3) at eval.c:2756 #22 0x0103162e in mapcar1 (leni=1, vals=0x0, fn=69619589, seq=50731778) at fns.c:2346 #23 0x010319d5 in Fmapc (function=3, sequence=71107830) at fns.c:2434 #24 0x010120e8 in Ffuncall (nargs=3, args=0x134acf8) at eval.c:2990 #25 0x0109f68c in exec_byte_code (bytestr=50731778, vector=2, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #26 0x01011a8a in funcall_lambda (fun=69619429, nargs=3, arg_vector=0x82e9e4) at eval.c:3218 #27 0x01011eed in Ffuncall (nargs=4, args=0x4264ee5) at eval.c:3048 #28 0x0109f68c in exec_byte_code (bytestr=50731778, vector=3, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #29 0x01011a8a in funcall_lambda (fun=19193997, nargs=2, arg_vector=0x82ec68) at eval.c:3218 #30 0x01011eed in Ffuncall (nargs=3, args=0x124e08d) at eval.c:3048 #31 0x01012618 in funcall_nil (nargs=3, args=0x3) at eval.c:2504 #32 0x0100f5af in run_hook_with_args (nargs=3, args=0x82ec64, funcall=0x1012600 ) at eval.c:2693 #33 0x0100f6f3 in Frun_hook_with_args (nargs=3, args=0x3) at eval.c:2554 #34 0x01012184 in Ffuncall (nargs=4, args=0x134a01d) at eval.c:2969 #35 0x0109f68c in exec_byte_code (bytestr=50731778, vector=3, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #36 0x0109ff82 in Fbyte_code (bytestr=3, vector=3, maxdepth=3) at bytecode.c:423 #37 0x01011227 in eval_sub (form=20240912) at eval.c:2341 #38 0x01012fbf in internal_lisp_condition_case (var=50869346, bodyform=19206126, handlers=19206174) at eval.c:1454 #39 0x0109ed1e in exec_byte_code (bytestr=50731778, vector=143, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:981 #40 0x01011a8a in funcall_lambda (fun=19205877, nargs=2, arg_vector=0x82f034) at eval.c:3218 #41 0x01011eed in Ffuncall (nargs=3, args=0x1250ef5) at eval.c:3048 #42 0x0109f68c in exec_byte_code (bytestr=50731778, vector=2, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #43 0x01011a8a in funcall_lambda (fun=19206717, nargs=1, arg_vector=0x82f278) at eval.c:3218 #44 0x01011eed in Ffuncall (nargs=2, args=0x125123d) at eval.c:3048 #45 0x0101275e in Fapply (nargs=2, args=0x82f274) at eval.c:2439 #46 0x01012184 in Ffuncall (nargs=3, args=0x134a065) at eval.c:2969 #47 0x0109f68c in exec_byte_code (bytestr=50731778, vector=2, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:785 #48 0x0109ff82 in Fbyte_code (bytestr=3, vector=3, maxdepth=3) at bytecode.c:423 #49 0x01011227 in eval_sub (form=20240912) at eval.c:2341 #50 0x01012fbf in internal_lisp_condition_case (var=50616346, bodyform=19235438, handlers=18612686) at eval.c:1454 #51 0x0109ed1e in exec_byte_code (bytestr=50731778, vector=143, maxdepth=50731776, args_template=50616346, nargs=0, args=0x0) at bytecode.c:981 #52 0x01011a8a in funcall_lambda (fun=19235277, nargs=1, arg_vector=0x82f64c) at eval.c:3218 #53 0x01011eed in Ffuncall (nargs=2, args=0x12581cd) at eval.c:3048 #54 0x0101257a in call1 (fn=3, arg1=3) at eval.c:2756 #55 0x0101e391 in timer_check () at keyboard.c:4437 #56 0x0101e5c2 in readable_events (flags=1) at keyboard.c:3388 #57 0x010244ad in get_input_pending (addr=0x13c51b0, flags=1) at keyboard.c:6713 #58 0x01024562 in detect_input_pending_run_timers (do_display=1) at keyboard.c:10480 #59 0x0101984b in wait_reading_process_output (time_limit=0, microsecs=0, read_kbd=-1, do_display=1, wait_for_cell=50616346, wait_proc=0x0, just_wait_proc=0) at process.c:4733 #60 0x01025c6a in read_char (commandflag=1, nmaps=2, maps=0x82fab0, prev_event=50616346, used_mouse_menu=0x82fbb8, end_time=0x0) at keyboard.c:3851 #61 0x01027b26 in read_key_sequence (keybuf=0x82fcb0, bufsize=30, prompt=50616346, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9300 #62 0x01029a9f in command_loop_1 () at keyboard.c:1448 #63 0x0100efbb in internal_condition_case (bfun=0x10298ff , handlers=50674074, hfun=0x102374d ) at eval.c:1500 #64 0x0101cf0f in command_loop_2 (ignore=50616346) at keyboard.c:1159 #65 0x0100eef0 in internal_catch (tag=3, func=0x101ceec , arg=50616346) at eval.c:1257 #66 0x0101cdc2 in recursive_edit_1 () at keyboard.c:1138 #67 0x0101ced6 in Frecursive_edit () at keyboard.c:822 #68 0x01002f21 in main (argc=1, argv=0xa47ff0) at emacs.c:1715 Lisp Backtrace: "c-in-knr-argdecl" (0x82df24) "byte-code" (0x82e030) "c-beginning-of-decl-1" (0x82e2d4) "c-set-fl-decl-start" (0x82e444) "c-context-set-fl-decl-start" (0x82e5b4) 0x4264f80 PVEC_COMPILED "mapc" (0x82e874) "c-font-lock-fontify-region" (0x82e9e4) "font-lock-fontify-region" (0x82ec68) "run-hook-with-args" (0x82ec64) "byte-code" (0x82ed60) "jit-lock-fontify-now" (0x82f034) "jit-lock-stealth-fontify" (0x82f278) "apply" (0x82f274) "byte-code" (0x82f370) "timer-event-handler" (0x82f64c) (gdb) p symbol $1 = 50731778 (gdb) xtype Lisp_Symbol (gdb) xsymbol $2 = (struct Lisp_Symbol *) 0x3061b00 "buffer-undo-list" (gdb) If Emacs crashed, and you have the Emacs process in the gdb debugger, please include the output from the following gdb commands: `bt full' and `xbacktrace'. For information about debugging Emacs, please read the file d:/usr/emacs/etc/DEBUG. In GNU Emacs 24.0.93.1 (i386-mingw-nt5.1.2600) of 2012-01-29 on HOME-C4E4A596F7 Windowing system distributor `Microsoft Corp.', version 5.1.2600 Configured using: `configure --with-gcc (3.4)' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: ENU value of $XMODIFIERS: nil locale-coding-system: cp1255 default enable-multibyte-characters: t Major mode: Mail Minor modes in effect: flyspell-mode: t diff-auto-refine-mode: t desktop-save-mode: t show-paren-mode: t display-time-mode: t tooltip-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t temp-buffer-resize-mode: t line-number-mode: t abbrev-mode: t Recent input: t h e SPC o t h e r SPC p o s s i b l e SPC r e a s i n SPC o n SPC i s SPC t h a t M-q M-d SPC ( n o t SPC i n s t a l l e d ) M-q C-c C-s d SPC M-z M-z M-z M-z M-z M-z M-z M-z M-z M-z M-z M-z M-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z C-z M-z n o G N U W SPC M-z n d SPC SPC d SPC d p p p p p p p p n n n n n C-z C-z C-z C-z C-z C-z C-z C-z f n e s s SPC C h e c k SPC t h i s SPC o u t . C-c C-s C-g C-x 1 C-x f C-c C-s n SPC o P O SPC n p p p p p p p p p p p p n n n n n n n n n n n n n n n n n n n n n n n n n n n C-x C-s M-x r e p o r t - e m Recent messages: Quit Sending... Added to d:/usr/eli/rmail/SENT.MAIL Sending email Sending email done Sending...done Added to d:/usr/eli/rmail/PORTS.rmail No following nondeleted message [16 times] Saving file d:/usr/eli/rmail/INBOX... Wrote d:/usr/eli/rmail/INBOX [2 times] Load-path shadows: None found. Features: (shadow emacsbug find-func multi-isearch help-mode view dabbrev network-stream starttls tls smtpmail auth-source eieio assoc gnus-util password-cache mailalias sendmail rmailout ld-script sh-script executable dired-x dired tcl nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph nxml-enc xmltok sgml-mode org-wl org-w3m org-vm org-rmail org-mhe org-mew org-irc org-jsinfo org-infojs org-html org-exp ob-exp org-exp-blocks org-agenda org-info org-gnus org-docview org-bibtex bibtex org-bbdb org byte-opt warnings bytecomp byte-compile cconv macroexp advice help-fns advice-preload ob-emacs-lisp ob-tangle ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys ob ob-eval org-pcomplete pcomplete comint ring org-list org-faces org-compat org-entities org-macs cal-menu calendar cal-loaddefs noutline outline arc-mode archive-mode jka-compr flyspell ispell autorevert diff-mode easy-mmode make-mode conf-mode newcomment generic parse-time vc-cvs info vc-bzr cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs regexp-opt rmailsum qp rmailmm message format-spec rfc822 mml easymenu mml-sec mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader mail-parse rfc2231 rmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils desktop server filecache saveplace midnight generic-x paren battery time time-date tooltip ediff-hook vc-hooks lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win w32-vars tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces cus-face files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process multi-tty emacs) --Boundary_(ID_X4UeYizexOpn37eHUJ41wQ) Content-type: application/octet-stream Content-transfer-encoding: base64 Content-disposition: attachment; filename=socket.c LyogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAz LCAyMDA0LCAyMDA1LAogKiAgIDIwMDYsIDIwMDcsIDIwMDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mCiAqIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBU aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEK ICogMDIxMTAtMTMwMSBVU0EKICovCgoKDAoKI2lmZGVmIEhBVkVfQ09ORklHX0gKIyAgaW5jbHVk ZSA8Y29uZmlnLmg+CiNlbmRpZgoKI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxnbXAuaD4K CiNpbmNsdWRlICJsaWJndWlsZS9fc2NtLmgiCiNpbmNsdWRlICJsaWJndWlsZS9hcnJheXMuaCIK I2luY2x1ZGUgImxpYmd1aWxlL2ZlYXR1cmUuaCIKI2luY2x1ZGUgImxpYmd1aWxlL2Zwb3J0cy5o IgojaW5jbHVkZSAibGliZ3VpbGUvc3RyaW5ncy5oIgojaW5jbHVkZSAibGliZ3VpbGUvdmVjdG9y cy5oIgojaW5jbHVkZSAibGliZ3VpbGUvZHlud2luZC5oIgojaW5jbHVkZSAibGliZ3VpbGUvc3Jm aS0xMy5oIgoKI2luY2x1ZGUgImxpYmd1aWxlL3ZhbGlkYXRlLmgiCiNpbmNsdWRlICJsaWJndWls ZS9zb2NrZXQuaCIKCiNpZiBTQ01fRU5BQkxFX0RFUFJFQ0FURUQgPT0gMQojIGluY2x1ZGUgImxp Ymd1aWxlL2RlcHJlY2F0aW9uLmgiCiNlbmRpZgoKI2lmZGVmIF9fTUlOR1czMl9fCiNpbmNsdWRl ICJ3aW4zMi1zb2NrZXQuaCIKI2luY2x1ZGUgPG5ldGRiLmg+CiNlbmRpZgoKI2lmZGVmIEhBVkVf U1RESU5UX0gKI2luY2x1ZGUgPHN0ZGludC5oPgojZW5kaWYKI2lmZGVmIEhBVkVfU1RSSU5HX0gK I2luY2x1ZGUgPHN0cmluZy5oPgojZW5kaWYKI2lmZGVmIEhBVkVfVU5JU1REX0gKI2luY2x1ZGUg PHVuaXN0ZC5oPgojZW5kaWYKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaWYgSEFWRV9XSU5TT0NL Ml9IICYmICFHTlVMSUJfVEVTVF9TT0NLRVQKI2luY2x1ZGUgPHdpbnNvY2syLmg+CiNlbHNlCiNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpZmRlZiBIQVZFX1VOSVhfRE9NQUlOX1NPQ0tFVFMKI2lu Y2x1ZGUgPHN5cy91bi5oPgojZW5kaWYKI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUg PG5ldGRiLmg+CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4KI2VuZGlmCgojaWYgZGVmaW5lZCAoSEFW RV9VTklYX0RPTUFJTl9TT0NLRVRTKSAmJiAhZGVmaW5lZCAoU1VOX0xFTikKI2RlZmluZSBTVU5f TEVOKHB0cikgKChzaXplX3QpICgoKHN0cnVjdCBzb2NrYWRkcl91biAqKSAwKS0+c3VuX3BhdGgp IFwKCQkgICAgICArIHN0cmxlbiAoKHB0ciktPnN1bl9wYXRoKSkKI2VuZGlmCgovKiBUaGUgbGFy Z2VzdCBwb3NzaWJsZSBzb2NrZXQgYWRkcmVzcy4gIFdyYXBwaW5nIGl0IGluIGEgdW5pb24gZ3Vh cmFudGVlcwogICB0aGF0IHRoZSBjb21waWxlciB3aWxsIG1ha2UgaXQgc3VpdGFibHkgYWxpZ25l ZC4gICovCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBzb2NrYWRkciAgICAgc29ja2FkZHI7CiAg c3RydWN0IHNvY2thZGRyX2luICBzb2NrYWRkcl9pbjsKCiNpZmRlZiBIQVZFX1VOSVhfRE9NQUlO X1NPQ0tFVFMKICBzdHJ1Y3Qgc29ja2FkZHJfdW4gIHNvY2thZGRyX3VuOwojZW5kaWYKI2lmZGVm IEhBVkVfSVBWNgogIHN0cnVjdCBzb2NrYWRkcl9pbjYgc29ja2FkZHJfaW42OwojZW5kaWYKfSBz Y21fdF9tYXhfc29ja2FkZHI7CgoKLyogTWF4aW11bSBzaXplIG9mIGEgc29ja2V0IGFkZHJlc3Mu ICAqLwojZGVmaW5lIE1BWF9BRERSX1NJWkUgICAoc2l6ZW9mIChzY21fdF9tYXhfc29ja2FkZHIp KQoKCgwKClNDTV9ERUZJTkUgKHNjbV9odG9ucywgImh0b25zIiwgMSwgMCwgMCwgCiAgICAgICAg ICAgIChTQ00gdmFsdWUpLAoJICAgICJDb252ZXJ0IGEgMTYgYml0IHF1YW50aXR5IGZyb20gaG9z dCB0byBuZXR3b3JrIGJ5dGUgb3JkZXJpbmcuXG4iCgkgICAgIkB2YXJ7dmFsdWV9IGlzIHBhY2tl ZCBpbnRvIDIgYnl0ZXMsIHdoaWNoIGFyZSB0aGVuIGNvbnZlcnRlZFxuIgoJICAgICJhbmQgcmV0 dXJuZWQgYXMgYSBuZXcgaW50ZWdlci4iKQojZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9odG9ucwp7 CiAgcmV0dXJuIHNjbV9mcm9tX3VzaG9ydCAoaHRvbnMgKHNjbV90b191c2hvcnQgKHZhbHVlKSkp Owp9CiN1bmRlZiBGVU5DX05BTUUKClNDTV9ERUZJTkUgKHNjbV9udG9ocywgIm50b2hzIiwgMSwg MCwgMCwgCiAgICAgICAgICAgIChTQ00gdmFsdWUpLAoJICAgICJDb252ZXJ0IGEgMTYgYml0IHF1 YW50aXR5IGZyb20gbmV0d29yayB0byBob3N0IGJ5dGUgb3JkZXJpbmcuXG4iCgkgICAgIkB2YXJ7 dmFsdWV9IGlzIHBhY2tlZCBpbnRvIDIgYnl0ZXMsIHdoaWNoIGFyZSB0aGVuIGNvbnZlcnRlZFxu IgoJICAgICJhbmQgcmV0dXJuZWQgYXMgYSBuZXcgaW50ZWdlci4iKQojZGVmaW5lIEZVTkNfTkFN RSBzX3NjbV9udG9ocwp7CiAgcmV0dXJuIHNjbV9mcm9tX3VzaG9ydCAobnRvaHMgKHNjbV90b191 c2hvcnQgKHZhbHVlKSkpOwp9CiN1bmRlZiBGVU5DX05BTUUKClNDTV9ERUZJTkUgKHNjbV9odG9u bCwgImh0b25sIiwgMSwgMCwgMCwgCiAgICAgICAgICAgIChTQ00gdmFsdWUpLAoJICAgICJDb252 ZXJ0IGEgMzIgYml0IHF1YW50aXR5IGZyb20gaG9zdCB0byBuZXR3b3JrIGJ5dGUgb3JkZXJpbmcu XG4iCgkgICAgIkB2YXJ7dmFsdWV9IGlzIHBhY2tlZCBpbnRvIDQgYnl0ZXMsIHdoaWNoIGFyZSB0 aGVuIGNvbnZlcnRlZFxuIgoJICAgICJhbmQgcmV0dXJuZWQgYXMgYSBuZXcgaW50ZWdlci4iKQoj ZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9odG9ubAp7CiAgcmV0dXJuIHNjbV9mcm9tX3Vsb25nICho dG9ubCAoc2NtX3RvX3VpbnQzMiAodmFsdWUpKSk7Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NNX0RF RklORSAoc2NtX250b2hsLCAibnRvaGwiLCAxLCAwLCAwLCAKICAgICAgICAgICAgKFNDTSB2YWx1 ZSksCgkgICAgIkNvbnZlcnQgYSAzMiBiaXQgcXVhbnRpdHkgZnJvbSBuZXR3b3JrIHRvIGhvc3Qg Ynl0ZSBvcmRlcmluZy5cbiIKCSAgICAiQHZhcnt2YWx1ZX0gaXMgcGFja2VkIGludG8gNCBieXRl cywgd2hpY2ggYXJlIHRoZW4gY29udmVydGVkXG4iCgkgICAgImFuZCByZXR1cm5lZCBhcyBhIG5l dyBpbnRlZ2VyLiIpCiNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX250b2hsCnsKICByZXR1cm4gc2Nt X2Zyb21fdWxvbmcgKG50b2hsIChzY21fdG9fdWludDMyICh2YWx1ZSkpKTsKfQojdW5kZWYgRlVO Q19OQU1FCgojaWZkZWYgSEFWRV9JTkVUX05FVE9GClNDTV9ERUZJTkUgKHNjbV9pbmV0X25ldG9m LCAiaW5ldC1uZXRvZiIsIDEsIDAsIDAsIAogICAgICAgICAgICAoU0NNIGFkZHJlc3MpLAoJICAg ICJSZXR1cm4gdGhlIG5ldHdvcmsgbnVtYmVyIHBhcnQgb2YgdGhlIGdpdmVuIElQdjRcbiIKCSAg ICAiSW50ZXJuZXQgYWRkcmVzcy4gIEUuZy4sXG5cbiIKCSAgICAiQGxpc3BcbiIKCSAgICAiKGlu ZXQtbmV0b2YgMjEzMDcwNjQzMykgQHJlc3VsdHt9IDEyN1xuIgoJICAgICJAZW5kIGxpc3AiKQoj ZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9pbmV0X25ldG9mCnsKICBzdHJ1Y3QgaW5fYWRkciBhZGRy OwogIGFkZHIuc19hZGRyID0gaHRvbmwgKFNDTV9OVU0yVUxPTkcgKDEsIGFkZHJlc3MpKTsKICBy ZXR1cm4gc2NtX2Zyb21fdWxvbmcgKGluZXRfbmV0b2YgKGFkZHIpKTsKfQojdW5kZWYgRlVOQ19O QU1FCiNlbmRpZgoKI2lmZGVmIEhBVkVfSU5FVF9MTkFPRgpTQ01fREVGSU5FIChzY21fbG5hb2Ys ICJpbmV0LWxuYW9mIiwgMSwgMCwgMCwgCiAgICAgICAgICAgIChTQ00gYWRkcmVzcyksCgkgICAg IlJldHVybiB0aGUgbG9jYWwtYWRkcmVzcy13aXRoLW5ldHdvcmsgcGFydCBvZiB0aGUgZ2l2ZW5c biIKCSAgICAiSVB2NCBJbnRlcm5ldCBhZGRyZXNzLCB1c2luZyB0aGUgb2Jzb2xldGUgY2xhc3Mg QS9CL0Mgc3lzdGVtLlxuIgoJICAgICJFLmcuLFxuXG4iCgkgICAgIkBsaXNwXG4iCgkgICAgIihp bmV0LWxuYW9mIDIxMzA3MDY0MzMpIEByZXN1bHR7fSAxXG4iCgkgICAgIkBlbmQgbGlzcCIpCiNk ZWZpbmUgRlVOQ19OQU1FIHNfc2NtX2xuYW9mCnsKICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwogIGFk ZHIuc19hZGRyID0gaHRvbmwgKFNDTV9OVU0yVUxPTkcgKDEsIGFkZHJlc3MpKTsKICByZXR1cm4g c2NtX2Zyb21fdWxvbmcgKGluZXRfbG5hb2YgKGFkZHIpKTsKfQojdW5kZWYgRlVOQ19OQU1FCiNl bmRpZgoKI2lmZGVmIEhBVkVfSU5FVF9NQUtFQUREUgpTQ01fREVGSU5FIChzY21faW5ldF9tYWtl YWRkciwgImluZXQtbWFrZWFkZHIiLCAyLCAwLCAwLAogICAgICAgICAgICAoU0NNIG5ldCwgU0NN IGxuYSksCgkgICAgIk1ha2UgYW4gSVB2NCBJbnRlcm5ldCBhZGRyZXNzIGJ5IGNvbWJpbmluZyB0 aGUgbmV0d29yayBudW1iZXJcbiIKCSAgICAiQHZhcntuZXR9IHdpdGggdGhlIGxvY2FsLWFkZHJl c3Mtd2l0aGluLW5ldHdvcmsgbnVtYmVyXG4iCgkgICAgIkB2YXJ7bG5hfS4gIEUuZy4sXG5cbiIK CSAgICAiQGxpc3BcbiIKCSAgICAiKGluZXQtbWFrZWFkZHIgMTI3IDEpIEByZXN1bHR7fSAyMTMw NzA2NDMzXG4iCgkgICAgIkBlbmQgbGlzcCIpCiNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX2luZXRf bWFrZWFkZHIKewogIHN0cnVjdCBpbl9hZGRyIGFkZHI7CiAgdW5zaWduZWQgbG9uZyBuZXRudW07 CiAgdW5zaWduZWQgbG9uZyBsbmFudW07CgogIG5ldG51bSA9IFNDTV9OVU0yVUxPTkcgKDEsIG5l dCk7CiAgbG5hbnVtID0gU0NNX05VTTJVTE9ORyAoMiwgbG5hKTsKICBhZGRyID0gaW5ldF9tYWtl YWRkciAobmV0bnVtLCBsbmFudW0pOwogIHJldHVybiBzY21fZnJvbV91bG9uZyAobnRvaGwgKGFk ZHIuc19hZGRyKSk7Cn0KI3VuZGVmIEZVTkNfTkFNRQojZW5kaWYKCiNpZmRlZiBIQVZFX0lQVjYK Ci8qIGZsaXAgYSAxMjggYml0IElQdjYgYWRkcmVzcyBiZXR3ZWVuIGhvc3QgYW5kIG5ldHdvcmsg b3JkZXIuICAqLwojaWZkZWYgV09SRFNfQklHRU5ESUFOCiNkZWZpbmUgRkxJUF9ORVRfSE9TVF8x MjgoYWRkcikKI2Vsc2UKI2RlZmluZSBGTElQX05FVF9IT1NUXzEyOChhZGRyKVwKe1wKICBpbnQg aTtcCiAgXAogIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspXAogICAge1wKICAgICAgc2NtX3RfdWlu dDggYyA9IChhZGRyKVtpXTtcCiAgICAgIFwKICAgICAgKGFkZHIpW2ldID0gKGFkZHIpWzE1IC0g aV07XAogICAgICAoYWRkcilbMTUgLSBpXSA9IGM7XAogICAgfVwKfQojZW5kaWYKCiNpZmRlZiBX T1JEU19CSUdFTkRJQU4KI2RlZmluZSBGTElQQ1BZX05FVF9IT1NUXzEyOChkZXN0LCBzcmMpIG1l bWNweSAoZGVzdCwgc3JjLCAxNikKI2Vsc2UKI2RlZmluZSBGTElQQ1BZX05FVF9IT1NUXzEyOChk ZXN0LCBzcmMpIFwKeyBcCiAgY29uc3Qgc2NtX3RfdWludDggKnRtcF9zcmNwID0gKHNyYykgKyAx NTsgXAogIHNjbV90X3VpbnQ4ICp0bXBfZGVzdHAgPSAoZGVzdCk7IFwKICBcCiAgZG8geyBcCiAg ICAqdG1wX2Rlc3RwKysgPSAqdG1wX3NyY3AtLTsgXAogIH0gd2hpbGUgKHRtcF9zcmNwICE9IChz cmMpKTsgXAp9CiNlbmRpZgoKCiNpZiAoU0laRU9GX1NDTV9UX0JJVFMgKiBTQ01fQ0hBUl9CSVQp ID4gMTI4CiNlcnJvciAiQXNzdW1wdGlvbiB0aGF0IHNjbV90X2JpdHMgPD0gMTI4IGJpdHMgaGFz IGJlZW4gdmlvbGF0ZWQuIgojZW5kaWYKCiNpZiAoU0laRU9GX1VOU0lHTkVEX0xPTkcgKiBTQ01f Q0hBUl9CSVQpID4gMTI4CiNlcnJvciAiQXNzdW1wdGlvbiB0aGF0IHVuc2lnbmVkIGxvbmcgPD0g MTI4IGJpdHMgaGFzIGJlZW4gdmlvbGF0ZWQuIgojZW5kaWYKCiNpZiAoU0laRU9GX1VOU0lHTkVE X0xPTkdfTE9ORyAqIFNDTV9DSEFSX0JJVCkgPiAxMjgKI2Vycm9yICJBc3N1bXB0aW9uIHRoYXQg dW5zaWduZWQgbG9uZyBsb25nIDw9IDEyOCBiaXRzIGhhcyBiZWVuIHZpb2xhdGVkLiIKI2VuZGlm CgovKiBjb252ZXJ0IGEgMTI4IGJpdCBJUHY2IGFkZHJlc3MgaW4gbmV0d29yayBvcmRlciB0byBh IGhvc3Qgb3JkZXJlZAogICBTQ00gaW50ZWdlci4gICovCnN0YXRpYyBTQ00Kc2NtX2Zyb21faXB2 NiAoY29uc3Qgc2NtX3RfdWludDggKnNyYykKewogIFNDTSByZXN1bHQgPSBzY21faV9ta2JpZyAo KTsKICBtcHpfaW1wb3J0IChTQ01fSV9CSUdfTVBaIChyZXN1bHQpLAogICAgICAgICAgICAgIDEs ICAvKiBjaHVuayAqLwogICAgICAgICAgICAgIDEsICAvKiBiaWctZW5kaWFuIGNodW5rIG9yZGVy aW5nICovCiAgICAgICAgICAgICAgMTYsIC8qIGNodW5rcyBhcmUgMTYgYnl0ZXMgbG9uZyAqLwog ICAgICAgICAgICAgIDEsICAvKiBiaWctZW5kaWFuIGJ5dGUgb3JkZXJpbmcgKi8KICAgICAgICAg ICAgICAwLCAgLyogIm5haWxzIiAtLSBsZWFkaW5nIHVudXNlZCBiaXRzIHBlciBjaHVuayAqLwog ICAgICAgICAgICAgIHNyYyk7CiAgcmV0dXJuIHNjbV9pX25vcm1iaWcgKHJlc3VsdCk7Cn0KCi8q IGNvbnZlcnQgYSBob3N0IG9yZGVyZWQgU0NNIGludGVnZXIgdG8gYSAxMjggYml0IElQdjYgYWRk cmVzcyBpbgogICBuZXR3b3JrIG9yZGVyLiAgKi8Kc3RhdGljIHZvaWQKc2NtX3RvX2lwdjYgKHNj bV90X3VpbnQ4IGRzdFsxNl0sIFNDTSBzcmMpCnsKICBpZiAoU0NNX0lfSU5VTVAgKHNyYykpCiAg ICB7CiAgICAgIHNjbV90X3NpZ25lZF9iaXRzIG4gPSBTQ01fSV9JTlVNIChzcmMpOwogICAgICBp ZiAobiA8IDApCglzY21fb3V0X29mX3JhbmdlIChOVUxMLCBzcmMpOwojaWZkZWYgV09SRFNfQklH RU5ESUFOCiAgICAgIG1lbXNldCAoZHN0LCAwLCAxNiAtIHNpemVvZiAoc2NtX3Rfc2lnbmVkX2Jp dHMpKTsKICAgICAgbWVtY3B5IChkc3QgKyAoMTYgLSBzaXplb2YgKHNjbV90X3NpZ25lZF9iaXRz KSksCiAgICAgICAgICAgICAgJm4sCiAgICAgICAgICAgICAgc2l6ZW9mIChzY21fdF9zaWduZWRf Yml0cykpOwojZWxzZQogICAgICBtZW1zZXQgKGRzdCArIHNpemVvZiAoc2NtX3Rfc2lnbmVkX2Jp dHMpLAogICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgMTYgLSBzaXplb2YgKHNjbV90X3Np Z25lZF9iaXRzKSk7CiAgICAgIC8qIEZJWE1FOiB0aGlzIHBhaXIgb2Ygb3BzIGlzIGtpbmRhIHdh c3RlZnVsIC0tIHNob3VsZCByZXdyaXRlIGFzCiAgICAgICAgIGEgc2luZ2xlIGxvb3AgcGVyaGFw cywgc2ltaWxhciB0byB0aGUgaGFuZGxpbmcgb2YgYmlnbnVtcy4gKi8KICAgICAgbWVtY3B5IChk c3QsICZuLCBzaXplb2YgKHNjbV90X3NpZ25lZF9iaXRzKSk7CiAgICAgIEZMSVBfTkVUX0hPU1Rf MTI4IChkc3QpOwojZW5kaWYKICAgIH0KICBlbHNlIGlmIChTQ01fQklHUCAoc3JjKSkKICAgIHsK ICAgICAgc2l6ZV90IGNvdW50OwogICAgICAKICAgICAgaWYgKChtcHpfc2duIChTQ01fSV9CSUdf TVBaIChzcmMpKSA8IDApCgkgIHx8IG1wel9zaXplaW5iYXNlIChTQ01fSV9CSUdfTVBaIChzcmMp LCAyKSA+IDEyOCkKCXNjbV9vdXRfb2ZfcmFuZ2UgKE5VTEwsIHNyYyk7CiAgICAgIAogICAgICBt ZW1zZXQgKGRzdCwgMCwgMTYpOwogICAgICBtcHpfZXhwb3J0IChkc3QsCiAgICAgICAgICAgICAg ICAgICZjb3VudCwKICAgICAgICAgICAgICAgICAgMSwgLyogYmlnLWVuZGlhbiBjaHVuayBvcmRl cmluZyAqLwogICAgICAgICAgICAgICAgICAxNiwgLyogY2h1bmtzIGFyZSAxNiBieXRlcyBsb25n ICovCiAgICAgICAgICAgICAgICAgIDEsIC8qIGJpZy1lbmRpYW4gYnl0ZSBvcmRlcmluZyAqLwog ICAgICAgICAgICAgICAgICAwLCAvKiAibmFpbHMiIC0tIGxlYWRpbmcgdW51c2VkIGJpdHMgcGVy IGNodW5rICovCiAgICAgICAgICAgICAgICAgIFNDTV9JX0JJR19NUFogKHNyYykpOwogICAgICBz Y21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKHNyYyk7CiAgICB9CiAgZWxzZQogICAgc2NtX3dyb25n X3R5cGVfYXJnX21zZyAoInNjbV90b19pcHY2IiwgMCwgc3JjLCAiaW50ZWdlciIpOwp9CgojZW5k aWYgIC8qIEhBVkVfSVBWNiAqLwoKDAoKU0NNX0RFRklORSAoc2NtX2luZXRfbnRvcCwgImluZXQt bnRvcCIsIDIsIDAsIDAsCiAgICAgICAgICAgIChTQ00gZmFtaWx5LCBTQ00gYWRkcmVzcyksCgkg ICAgIkNvbnZlcnQgYSBuZXR3b3JrIGFkZHJlc3MgaW50byBhIHByaW50YWJsZSBzdHJpbmcuXG4i CgkgICAgIk5vdGUgdGhhdCB1bmxpa2UgdGhlIEMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLFxu IgoJICAgICJ0aGUgaW5wdXQgaXMgYW4gaW50ZWdlciB3aXRoIG5vcm1hbCBob3N0IGJ5dGUgb3Jk ZXJpbmcuXG4iCgkgICAgIkB2YXJ7ZmFtaWx5fSBjYW4gYmUgQGNvZGV7QUZfSU5FVH0gb3IgQGNv ZGV7QUZfSU5FVDZ9LiAgRS5nLixcblxuIgoJICAgICJAbGlzcFxuIgoJICAgICIoaW5ldC1udG9w IEFGX0lORVQgMjEzMDcwNjQzMykgQHJlc3VsdHt9IFwiMTI3LjAuMC4xXCJcbiIKCSAgICAiKGlu ZXQtbnRvcCBBRl9JTkVUNiAoLSAoZXhwdCAyIDEyOCkgMSkpXG4iCgkgICAgIiAgQHJlc3VsdHt9 IFwiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmXCJcbiIKCSAgICAiQGVu ZCBsaXNwIikKI2RlZmluZSBGVU5DX05BTUUgc19zY21faW5ldF9udG9wCnsKICBpbnQgYWY7CiNp ZmRlZiBJTkVUNl9BRERSU1RSTEVOCiAgY2hhciBkc3RbSU5FVDZfQUREUlNUUkxFTl07CiNlbHNl CiAgY2hhciBkc3RbNDZdOwojZW5kaWYKICBjb25zdCBjaGFyICpyZXN1bHQ7CgogIGFmID0gc2Nt X3RvX2ludCAoZmFtaWx5KTsKICBTQ01fQVNTRVJUX1JBTkdFICgxLCBmYW1pbHksCgkJICAgIGFm ID09IEFGX0lORVQKI2lmZGVmIEhBVkVfSVBWNgoJCSAgICB8fCBhZiA9PSBBRl9JTkVUNgojZW5k aWYKCQkgICAgKTsKICBpZiAoYWYgPT0gQUZfSU5FVCkKICAgIHsKICAgICAgc2NtX3RfdWludDMy IGFkZHI0OwoKICAgICAgYWRkcjQgPSBodG9ubCAoU0NNX05VTTJVTE9ORyAoMiwgYWRkcmVzcykp OwogICAgICByZXN1bHQgPSBpbmV0X250b3AgKGFmLCAmYWRkcjQsIGRzdCwgc2l6ZW9mIChkc3Qp KTsKICAgIH0KI2lmZGVmIEhBVkVfSVBWNgogIGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KQogICAg ewogICAgICBjaGFyIGFkZHI2WzE2XTsKCiAgICAgIHNjbV90b19pcHY2ICgoc2NtX3RfdWludDgg KikgYWRkcjYsIGFkZHJlc3MpOwogICAgICByZXN1bHQgPSBpbmV0X250b3AgKGFmLCAmYWRkcjYs IGRzdCwgc2l6ZW9mIChkc3QpKTsKICAgIH0KI2VuZGlmCiAgZWxzZQogICAgU0NNX01JU0NfRVJS T1IgKCJ1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSIsIGZhbWlseSk7CgogIGlmIChyZXN1bHQg PT0gTlVMTCkKICAgIFNDTV9TWVNFUlJPUjsKCiAgcmV0dXJuIHNjbV9mcm9tX2xvY2FsZV9zdHJp bmcgKGRzdCk7Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NNX0RFRklORSAoc2NtX2luZXRfcHRvbiwg ImluZXQtcHRvbiIsIDIsIDAsIDAsCiAgICAgICAgICAgIChTQ00gZmFtaWx5LCBTQ00gYWRkcmVz cyksCgkgICAgIkNvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBhIHByaW50YWJsZSBuZXR3b3Jr IGFkZHJlc3MgdG9cbiIKCSAgICAiYW4gaW50ZWdlciBhZGRyZXNzLiAgTm90ZSB0aGF0IHVubGlr ZSB0aGUgQyB2ZXJzaW9uIG9mIHRoaXNcbiIKCSAgICAiZnVuY3Rpb24sXG4iCgkgICAgInRoZSBy ZXN1bHQgaXMgYW4gaW50ZWdlciB3aXRoIG5vcm1hbCBob3N0IGJ5dGUgb3JkZXJpbmcuXG4iCgkg ICAgIkB2YXJ7ZmFtaWx5fSBjYW4gYmUgQGNvZGV7QUZfSU5FVH0gb3IgQGNvZGV7QUZfSU5FVDZ9 LiAgRS5nLixcblxuIgoJICAgICJAbGlzcFxuIgoJICAgICIoaW5ldC1wdG9uIEFGX0lORVQgXCIx MjcuMC4wLjFcIikgQHJlc3VsdHt9IDIxMzA3MDY0MzNcbiIKCSAgICAiKGluZXQtcHRvbiBBRl9J TkVUNiBcIjo6MVwiKSBAcmVzdWx0e30gMVxuIgoJICAgICJAZW5kIGxpc3AiKQojZGVmaW5lIEZV TkNfTkFNRSBzX3NjbV9pbmV0X3B0b24KewogIGludCBhZjsKICBjaGFyICpzcmM7CiAgc2NtX3Rf dWludDMyIGRzdFs0XTsKICBpbnQgcnYsIGVubzsKCiAgYWYgPSBzY21fdG9faW50IChmYW1pbHkp OwogIFNDTV9BU1NFUlRfUkFOR0UgKDEsIGZhbWlseSwKCQkgICAgYWYgPT0gQUZfSU5FVAojaWZk ZWYgSEFWRV9JUFY2CgkJICAgIHx8IGFmID09IEFGX0lORVQ2CiNlbmRpZgoJCSAgICApOwoKICBz cmMgPSBzY21fdG9fbG9jYWxlX3N0cmluZyAoYWRkcmVzcyk7CiAgcnYgPSBpbmV0X3B0b24gKGFm LCBzcmMsIGRzdCk7CiAgZW5vID0gZXJybm87CiAgZnJlZSAoc3JjKTsKICBlcnJubyA9IGVubzsK CiAgaWYgKHJ2ID09IC0xKQogICAgU0NNX1NZU0VSUk9SOwogIGVsc2UgaWYgKHJ2ID09IDApCiAg ICBTQ01fTUlTQ19FUlJPUiAoIkJhZCBhZGRyZXNzIiwgU0NNX0VPTCk7CiAgaWYgKGFmID09IEFG X0lORVQpCiAgICByZXR1cm4gc2NtX2Zyb21fdWxvbmcgKG50b2hsICgqZHN0KSk7CiNpZmRlZiBI QVZFX0lQVjYKICBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikKICAgIHJldHVybiBzY21fZnJvbV9p cHY2ICgoc2NtX3RfdWludDggKikgZHN0KTsKI2VuZGlmCiAgZWxzZQogICAgU0NNX01JU0NfRVJS T1IgKCJ1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSIsIGZhbWlseSk7Cn0KI3VuZGVmIEZVTkNf TkFNRQoKDApTQ01fU1lNQk9MIChzeW1fc29ja2V0LCAic29ja2V0Iik7CgojZGVmaW5lIFNDTV9T T0NLX0ZEX1RPX1BPUlQoZmQpIHNjbV9mZGVzX3RvX3BvcnQgKGZkLCAiciswIiwgc3ltX3NvY2tl dCkKClNDTV9ERUZJTkUgKHNjbV9zb2NrZXQsICJzb2NrZXQiLCAzLCAwLCAwLAogICAgICAgICAg ICAoU0NNIGZhbWlseSwgU0NNIHN0eWxlLCBTQ00gcHJvdG8pLAoJICAgICJSZXR1cm4gYSBuZXcg c29ja2V0IHBvcnQgb2YgdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IEB2YXJ7ZmFtaWx5fSxcbiIKCSAg ICAiQHZhcntzdHlsZX0gYW5kIEB2YXJ7cHJvdG99LiAgQWxsIHRocmVlIHBhcmFtZXRlcnMgYXJl XG4iCgkgICAgImludGVnZXJzLiAgU3VwcG9ydGVkIHZhbHVlcyBmb3IgQHZhcntmYW1pbHl9IGFy ZVxuIgoJICAgICJAY29kZXtBRl9VTklYfSwgQGNvZGV7QUZfSU5FVH0gYW5kIEBjb2Rle0FGX0lO RVQ2fS5cbiIKCSAgICAiVHlwaWNhbCB2YWx1ZXMgZm9yIEB2YXJ7c3R5bGV9IGFyZSBAY29kZXtT T0NLX1NUUkVBTX0sXG4iCgkgICAgIkBjb2Rle1NPQ0tfREdSQU19IGFuZCBAY29kZXtTT0NLX1JB V30uXG5cbiIKCSAgICAiQHZhcntwcm90b30gY2FuIGJlIG9idGFpbmVkIGZyb20gYSBwcm90b2Nv bCBuYW1lIHVzaW5nXG4iCgkgICAgIkBjb2Rle2dldHByb3RvYnluYW1lfS4gIEEgdmFsdWUgb2Yg emVybyBzcGVjaWZpZXMgdGhlIGRlZmF1bHRcbiIKCSAgICAicHJvdG9jb2wsIHdoaWNoIGlzIHVz dWFsbHkgcmlnaHQuXG5cbiIKCSAgICAiQSBzaW5nbGUgc29ja2V0IHBvcnQgY2Fubm90IGJ5IHVz ZWQgZm9yIGNvbW11bmljYXRpb24gdW50aWwgaXRcbiIKCSAgICAiaGFzIGJlZW4gY29ubmVjdGVk IHRvIGFub3RoZXIgc29ja2V0LiIpCiNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX3NvY2tldAp7CiAg aW50IGZkOwoKICBmZCA9IHNvY2tldCAoc2NtX3RvX2ludCAoZmFtaWx5KSwKCSAgICAgICBzY21f dG9faW50IChzdHlsZSksCgkgICAgICAgc2NtX3RvX2ludCAocHJvdG8pKTsKICBpZiAoZmQgPT0g LTEpCiAgICBTQ01fU1lTRVJST1I7CiAgcmV0dXJuIFNDTV9TT0NLX0ZEX1RPX1BPUlQgKGZkKTsK fQojdW5kZWYgRlVOQ19OQU1FCgojaWZkZWYgSEFWRV9TT0NLRVRQQUlSClNDTV9ERUZJTkUgKHNj bV9zb2NrZXRwYWlyLCAic29ja2V0cGFpciIsIDMsIDAsIDAsCiAgICAgICAgICAgIChTQ00gZmFt aWx5LCBTQ00gc3R5bGUsIFNDTSBwcm90byksCgkgICAgIlJldHVybiBhIHBhaXIgb2YgY29ubmVj dGVkIChidXQgdW5uYW1lZCkgc29ja2V0IHBvcnRzIG9mIHRoZVxuIgoJICAgICJ0eXBlIHNwZWNp ZmllZCBieSBAdmFye2ZhbWlseX0sIEB2YXJ7c3R5bGV9IGFuZCBAdmFye3Byb3RvfS5cbiIKCSAg ICAiTWFueSBzeXN0ZW1zIHN1cHBvcnQgb25seSBzb2NrZXQgcGFpcnMgb2YgdGhlIEBjb2Rle0FG X1VOSVh9XG4iCgkgICAgImZhbWlseS4gIFplcm8gaXMgbGlrZWx5IHRvIGJlIHRoZSBvbmx5IG1l YW5pbmdmdWwgdmFsdWUgZm9yXG4iCgkgICAgIkB2YXJ7cHJvdG99LiIpCiNkZWZpbmUgRlVOQ19O QU1FIHNfc2NtX3NvY2tldHBhaXIKewogIGludCBmYW07CiAgaW50IGZkWzJdOwoKICBmYW0gPSBz Y21fdG9faW50IChmYW1pbHkpOwoKICBpZiAoc29ja2V0cGFpciAoZmFtLCBzY21fdG9faW50IChz dHlsZSksIHNjbV90b19pbnQgKHByb3RvKSwgZmQpID09IC0xKQogICAgU0NNX1NZU0VSUk9SOwoK ICByZXR1cm4gc2NtX2NvbnMgKFNDTV9TT0NLX0ZEX1RPX1BPUlQgKGZkWzBdKSwgU0NNX1NPQ0tf RkRfVE9fUE9SVCAoZmRbMV0pKTsKfQojdW5kZWYgRlVOQ19OQU1FCiNlbmRpZgoKLyogUG9zc2li bGUgcmVzdWx0cyBmb3IgYGdldHNvY2tvcHQgKCknLiAgV3JhcHBpbmcgaXQgaW50byBhIHVuaW9u IGd1YXJhbnRlZXMKICAgc3VpdGFibGUgYWxpZ25tZW50LiAgKi8KdHlwZWRlZiB1bmlvbgp7CiNp ZmRlZiBIQVZFX1NUUlVDVF9MSU5HRVIKICBzdHJ1Y3QgbGluZ2VyIGxpbmdlcjsKI2VuZGlmCiAg c2l6ZV90IHNpemU7CiAgaW50ICAgIGludGVnZXI7Cn0gc2NtX3RfZ2V0c29ja29wdF9yZXN1bHQ7 CgpTQ01fREVGSU5FIChzY21fZ2V0c29ja29wdCwgImdldHNvY2tvcHQiLCAzLCAwLCAwLAogICAg ICAgICAgICAoU0NNIHNvY2ssIFNDTSBsZXZlbCwgU0NNIG9wdG5hbWUpLAoJICAgICJSZXR1cm4g YW4gb3B0aW9uIHZhbHVlIGZyb20gc29ja2V0IHBvcnQgQHZhcntzb2NrfS5cbiIKCSAgICAiXG4i CgkgICAgIkB2YXJ7bGV2ZWx9IGlzIGFuIGludGVnZXIgc3BlY2lmeWluZyBhIHByb3RvY29sIGxh eWVyLCBlaXRoZXJcbiIKCSAgICAiQGNvZGV7U09MX1NPQ0tFVH0gZm9yIHNvY2tldCBsZXZlbCBv cHRpb25zLCBvciBhIHByb3RvY29sXG4iCgkgICAgIm51bWJlciBmcm9tIHRoZSBAY29kZXtJUFBS T1RPfSBjb25zdGFudHMgb3IgQGNvZGV7Z2V0cHJvdG9lbnR9XG4iCgkgICAgIihAcHhyZWZ7TmV0 d29yayBEYXRhYmFzZXN9KS5cbiIKCSAgICAiXG4iCgkgICAgIkBkZWZ2YXIgU09MX1NPQ0tFVFxu IgoJICAgICJAZGVmdmFyeCBJUFBST1RPX0lQXG4iCgkgICAgIkBkZWZ2YXJ4IElQUFJPVE9fVENQ XG4iCgkgICAgIkBkZWZ2YXJ4IElQUFJPVE9fVURQXG4iCgkgICAgIkBlbmQgZGVmdmFyXG4iCgkg ICAgIlxuIgoJICAgICJAdmFye29wdG5hbWV9IGlzIGFuIGludGVnZXIgc3BlY2lmeWluZyBhbiBv cHRpb24gd2l0aGluIHRoZVxuIgoJICAgICJwcm90b2NvbCBsYXllci5cbiIKCSAgICAiXG4iCgkg ICAgIkZvciBAY29kZXtTT0xfU09DS0VUfSBsZXZlbCB0aGUgZm9sbG93aW5nIEB2YXJ7b3B0bmFt ZX1zIGFyZVxuIgoJICAgICJkZWZpbmVkICh3aGVuIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0pLiAg Rm9yIHRoZWlyIG1lYW5pbmcgc2VlXG4iCgkgICAgIkByZWZ7U29ja2V0LUxldmVsIE9wdGlvbnMs LCwgbGliYywgVGhlIEdOVSBDIExpYnJhcnkgUmVmZXJlbmNlXG4iCgkgICAgIk1hbnVhbH0sIG9y IEBjb21tYW5ke21hbiA3IHNvY2tldH0uXG4iCgkgICAgIlxuIgoJICAgICJAZGVmdmFyIFNPX0RF QlVHXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX1JFVVNFQUREUlxuIgoJICAgICJAZGVmdmFyeCBTT19T VFlMRVxuIgoJICAgICJAZGVmdmFyeCBTT19UWVBFXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX0VSUk9S XG4iCgkgICAgIkBkZWZ2YXJ4IFNPX0RPTlRST1VURVxuIgoJICAgICJAZGVmdmFyeCBTT19CUk9B RENBU1RcbiIKCSAgICAiQGRlZnZhcnggU09fU05EQlVGXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX1JD VkJVRlxuIgoJICAgICJAZGVmdmFyeCBTT19LRUVQQUxJVkVcbiIKCSAgICAiQGRlZnZhcnggU09f T09CSU5MSU5FXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX05PX0NIRUNLXG4iCgkgICAgIkBkZWZ2YXJ4 IFNPX1BSSU9SSVRZXG4iCgkgICAgIlRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhbiBpbnRlZ2VyLlxu IgoJICAgICJAZW5kIGRlZnZhclxuIgoJICAgICJcbiIKCSAgICAiQGRlZnZhciBTT19MSU5HRVJc biIKCSAgICAiVGhlIEB2YXJ7dmFsdWV9IHJldHVybmVkIGlzIGEgcGFpciBvZiBpbnRlZ2Vyc1xu IgoJICAgICJAY29kZXsoQHZhcntFTkFCTEV9IC4gQHZhcntUSU1FT1VUfSl9LiAgT24gb2xkIHN5 c3RlbXMgd2l0aG91dFxuIgoJICAgICJ0aW1lb3V0IHN1cHBvcnQgKGllLkA6IHdpdGhvdXQgQGNv ZGV7c3RydWN0IGxpbmdlcn0pLCBvbmx5XG4iCgkgICAgIkB2YXJ7RU5BQkxFfSBoYXMgYW4gZWZm ZWN0IGJ1dCB0aGUgdmFsdWUgaW4gR3VpbGUgaXMgYWx3YXlzIGFcbiIKCSAgICAicGFpci5cbiIK CSAgICAiQGVuZCBkZWZ2YXIiKQojZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9nZXRzb2Nrb3B0CnsK ICBpbnQgZmQ7CiAgLyogc2l6ZSBvZiBvcHR2YWwgaXMgdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIG9w dGlvbi4gICovCiAgc2NtX3RfZ2V0c29ja29wdF9yZXN1bHQgb3B0dmFsOwogIHNvY2tsZW5fdCBv cHRsZW4gPSBzaXplb2YgKG9wdHZhbCk7CiAgaW50IGlsZXZlbDsKICBpbnQgaW9wdG5hbWU7Cgog IHNvY2sgPSBTQ01fQ09FUkNFX09VVFBPUlQgKHNvY2spOwogIFNDTV9WQUxJREFURV9PUEZQT1JU ICgxLCBzb2NrKTsKICBpbGV2ZWwgPSBzY21fdG9faW50IChsZXZlbCk7CiAgaW9wdG5hbWUgPSBz Y21fdG9faW50IChvcHRuYW1lKTsKCiAgZmQgPSBTQ01fRlBPUlRfRkRFUyAoc29jayk7CiAgaWYg KGdldHNvY2tvcHQgKGZkLCBpbGV2ZWwsIGlvcHRuYW1lLCAodm9pZCAqKSAmb3B0dmFsLCAmb3B0 bGVuKSA9PSAtMSkKICAgIFNDTV9TWVNFUlJPUjsKCiAgaWYgKGlsZXZlbCA9PSBTT0xfU09DS0VU KQogICAgewojaWZkZWYgU09fTElOR0VSCiAgICAgIGlmIChpb3B0bmFtZSA9PSBTT19MSU5HRVIp Cgl7CiNpZmRlZiBIQVZFX1NUUlVDVF9MSU5HRVIKCSAgc3RydWN0IGxpbmdlciAqbGluZyA9IChz dHJ1Y3QgbGluZ2VyICopICZvcHR2YWw7CgoJICByZXR1cm4gc2NtX2NvbnMgKHNjbV9mcm9tX2xv bmcgKGxpbmctPmxfb25vZmYpLAoJCQkgICBzY21fZnJvbV9sb25nIChsaW5nLT5sX2xpbmdlcikp OwojZWxzZQoJICByZXR1cm4gc2NtX2NvbnMgKHNjbV9mcm9tX2xvbmcgKCooaW50ICopICZvcHR2 YWwpLAoJCQkgICBzY21fZnJvbV9pbnQgKDApKTsKI2VuZGlmCgl9CiAgICAgIGVsc2UKI2VuZGlm CglpZiAoMAojaWZkZWYgU09fU05EQlVGCgkgICAgfHwgaW9wdG5hbWUgPT0gU09fU05EQlVGCiNl bmRpZgojaWZkZWYgU09fUkNWQlVGCgkgICAgfHwgaW9wdG5hbWUgPT0gU09fUkNWQlVGCiNlbmRp ZgoJICAgICkKCSAgewoJICAgIHJldHVybiBzY21fZnJvbV9zaXplX3QgKCooc2l6ZV90ICopICZv cHR2YWwpOwoJICB9CiAgICB9CiAgcmV0dXJuIHNjbV9mcm9tX2ludCAoKihpbnQgKikgJm9wdHZh bCk7Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NNX0RFRklORSAoc2NtX3NldHNvY2tvcHQsICJzZXRz b2Nrb3B0IiwgNCwgMCwgMCwKICAgICAgICAgICAgKFNDTSBzb2NrLCBTQ00gbGV2ZWwsIFNDTSBv cHRuYW1lLCBTQ00gdmFsdWUpLAoJICAgICJTZXQgYW4gb3B0aW9uIG9uIHNvY2tldCBwb3J0IEB2 YXJ7c29ja30uICBUaGUgcmV0dXJuIHZhbHVlIGlzXG4iCgkgICAgInVuc3BlY2lmaWVkLlxuIgoJ ICAgICJcbiIKCSAgICAiQHZhcntsZXZlbH0gaXMgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIGEgcHJv dG9jb2wgbGF5ZXIsIGVpdGhlclxuIgoJICAgICJAY29kZXtTT0xfU09DS0VUfSBmb3Igc29ja2V0 IGxldmVsIG9wdGlvbnMsIG9yIGEgcHJvdG9jb2xcbiIKCSAgICAibnVtYmVyIGZyb20gdGhlIEBj b2Rle0lQUFJPVE99IGNvbnN0YW50cyBvciBAY29kZXtnZXRwcm90b2VudH1cbiIKCSAgICAiKEBw eHJlZntOZXR3b3JrIERhdGFiYXNlc30pLlxuIgoJICAgICJcbiIKCSAgICAiQGRlZnZhciBTT0xf U09DS0VUXG4iCgkgICAgIkBkZWZ2YXJ4IElQUFJPVE9fSVBcbiIKCSAgICAiQGRlZnZhcnggSVBQ Uk9UT19UQ1BcbiIKCSAgICAiQGRlZnZhcnggSVBQUk9UT19VRFBcbiIKCSAgICAiQGVuZCBkZWZ2 YXJcbiIKCSAgICAiXG4iCgkgICAgIkB2YXJ7b3B0bmFtZX0gaXMgYW4gaW50ZWdlciBzcGVjaWZ5 aW5nIGFuIG9wdGlvbiB3aXRoaW4gdGhlXG4iCgkgICAgInByb3RvY29sIGxheWVyLlxuIgoJICAg ICJcbiIKCSAgICAiRm9yIEBjb2Rle1NPTF9TT0NLRVR9IGxldmVsIHRoZSBmb2xsb3dpbmcgQHZh cntvcHRuYW1lfXMgYXJlXG4iCgkgICAgImRlZmluZWQgKHdoZW4gcHJvdmlkZWQgYnkgdGhlIHN5 c3RlbSkuICBGb3IgdGhlaXIgbWVhbmluZyBzZWVcbiIKCSAgICAiQHJlZntTb2NrZXQtTGV2ZWwg T3B0aW9ucywsLCBsaWJjLCBUaGUgR05VIEMgTGlicmFyeSBSZWZlcmVuY2VcbiIKCSAgICAiTWFu dWFsfSwgb3IgQGNvbW1hbmR7bWFuIDcgc29ja2V0fS5cbiIKCSAgICAiXG4iCgkgICAgIkBkZWZ2 YXIgU09fREVCVUdcbiIKCSAgICAiQGRlZnZhcnggU09fUkVVU0VBRERSXG4iCgkgICAgIkBkZWZ2 YXJ4IFNPX1NUWUxFXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX1RZUEVcbiIKCSAgICAiQGRlZnZhcngg U09fRVJST1JcbiIKCSAgICAiQGRlZnZhcnggU09fRE9OVFJPVVRFXG4iCgkgICAgIkBkZWZ2YXJ4 IFNPX0JST0FEQ0FTVFxuIgoJICAgICJAZGVmdmFyeCBTT19TTkRCVUZcbiIKCSAgICAiQGRlZnZh cnggU09fUkNWQlVGXG4iCgkgICAgIkBkZWZ2YXJ4IFNPX0tFRVBBTElWRVxuIgoJICAgICJAZGVm dmFyeCBTT19PT0JJTkxJTkVcbiIKCSAgICAiQGRlZnZhcnggU09fTk9fQ0hFQ0tcbiIKCSAgICAi QGRlZnZhcnggU09fUFJJT1JJVFlcbiIKCSAgICAiQHZhcnt2YWx1ZX0gaXMgYW4gaW50ZWdlci5c biIKCSAgICAiQGVuZCBkZWZ2YXJcbiIKCSAgICAiXG4iCgkgICAgIkBkZWZ2YXIgU09fTElOR0VS XG4iCgkgICAgIkB2YXJ7dmFsdWV9IGlzIGEgcGFpciBvZiBpbnRlZ2VycyBAY29kZXsoQHZhcntF TkFCTEV9XG4iCgkgICAgIi4gQHZhcntUSU1FT1VUfSl9LiAgT24gb2xkIHN5c3RlbXMgd2l0aG91 dCB0aW1lb3V0IHN1cHBvcnRcbiIKCSAgICAiKGllLkA6IHdpdGhvdXQgQGNvZGV7c3RydWN0IGxp bmdlcn0pLCBvbmx5IEB2YXJ7RU5BQkxFfSBoYXMgYW5cbiIKCSAgICAiZWZmZWN0IGJ1dCB0aGUg dmFsdWUgaW4gR3VpbGUgaXMgYWx3YXlzIGEgcGFpci5cbiIKCSAgICAiQGVuZCBkZWZ2YXJcbiIK CSAgICAiXG4iCgkgICAgIkBjICBOb3RlIHRoYXQgd2UgcmVmZXIgb25seSB0byBgYG1hbiBpcCcn IGhlcmUuICBPbiBHTlUvTGludXggaXQnc1xuIgoJICAgICJAYyAgYGBtYW4gNyBpcCcnIGJ1dCBv biBOZXRCU0QgaXQncyBgYG1hbiA0IGlwJycuXG4iCgkgICAgIkBjIFxuIgoJICAgICJGb3IgSVAg bGV2ZWwgKEBjb2Rle0lQUFJPVE9fSVB9KSB0aGUgZm9sbG93aW5nIEB2YXJ7b3B0bmFtZX1zXG4i CgkgICAgImFyZSBkZWZpbmVkICh3aGVuIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0pLiAgU2VlIEBj b21tYW5ke21hblxuIgoJICAgICJpcH0gZm9yIHdoYXQgdGhleSBtZWFuLlxuIgoJICAgICJcbiIK CSAgICAiQGRlZnZhciBJUF9NVUxUSUNBU1RfSUZcbiIKICAgICAgICAgICAgIlRoaXMgc2V0cyB0 aGUgc291cmNlIGludGVyZmFjZSB1c2VkIGJ5IG11bHRpY2FzdCB0cmFmZmljLlxuIgoJICAgICJA ZW5kIGRlZnZhclxuIgoJICAgICJcbiIKCSAgICAiQGRlZnZhciBJUF9NVUxUSUNBU1RfVFRMXG4i CiAgICAgICAgICAgICJUaGlzIHNldHMgdGhlIGRlZmF1bHQgVFRMIGZvciBtdWx0aWNhc3QgdHJh ZmZpYy4gVGhpcyBkZWZhdWx0cyBcbiIKICAgICAgICAgICAgInRvIDEgYW5kIHNob3VsZCBiZSBp bmNyZWFzZWQgdG8gYWxsb3cgdHJhZmZpYyB0byBwYXNzIGJleW9uZCB0aGVcbiIKICAgICAgICAg ICAgImxvY2FsIG5ldHdvcmsuXG4iCgkgICAgIkBlbmQgZGVmdmFyXG4iCgkgICAgIlxuIgoJICAg ICJAZGVmdmFyIElQX0FERF9NRU1CRVJTSElQXG4iCgkgICAgIkBkZWZ2YXJ4IElQX0RST1BfTUVN QkVSU0hJUFxuIgoJICAgICJUaGVzZSBjYW4gYmUgdXNlZCBvbmx5IHdpdGggQGNvZGV7c2V0c29j a29wdH0sIG5vdFxuIgoJICAgICJAY29kZXtnZXRzb2Nrb3B0fS4gIEB2YXJ7dmFsdWV9IGlzIGEg cGFpclxuIgoJICAgICJAY29kZXsoQHZhcntNVUxUSUFERFJ9IC4gQHZhcntJTlRFUkZBQ0VBRERS fSl9IG9mIElQdjRcbiIKCSAgICAiYWRkcmVzc2VzIChAcHhyZWZ7TmV0d29yayBBZGRyZXNzIENv bnZlcnNpb259KS5cbiIKCSAgICAiQHZhcntNVUxUSUFERFJ9IGlzIGEgbXVsdGljYXN0IGFkZHJl c3MgdG8gYmUgYWRkZWQgdG8gb3JcbiIKCSAgICAiZHJvcHBlZCBmcm9tIHRoZSBpbnRlcmZhY2Ug QHZhcntJTlRFUkZBQ0VBRERSfS5cbiIKCSAgICAiQHZhcntJTlRFUkZBQ0VBRERSfSBjYW4gYmUg QGNvZGV7SU5BRERSX0FOWX0gdG8gaGF2ZSB0aGUgc3lzdGVtXG4iCgkgICAgInNlbGVjdCB0aGUg aW50ZXJmYWNlLiAgQHZhcntJTlRFUkZBQ0VBRERSfSBjYW4gYWxzbyBiZSBhblxuIgoJICAgICJp bnRlcmZhY2UgaW5kZXggbnVtYmVyLCBvbiBzeXN0ZW1zIHN1cHBvcnRpbmcgdGhhdC5cbiIKCSAg ICAiQGVuZCBkZWZ2YXIiKQojZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9zZXRzb2Nrb3B0CnsKICBp bnQgZmQ7CgogIGludCBvcHRfaW50OwojaWZkZWYgSEFWRV9TVFJVQ1RfTElOR0VSCiAgc3RydWN0 IGxpbmdlciBvcHRfbGluZ2VyOwojZW5kaWYKCiNpZmRlZiBIQVZFX1NUUlVDVF9JUF9NUkVRCiAg c3RydWN0IGlwX21yZXEgb3B0X21yZXE7CiNlbmRpZgoKICBjb25zdCB2b2lkICpvcHR2YWwgPSBO VUxMOwogIHNvY2tsZW5fdCBvcHRsZW4gPSAwOwoKICBpbnQgaWxldmVsLCBpb3B0bmFtZTsKCiAg c29jayA9IFNDTV9DT0VSQ0VfT1VUUE9SVCAoc29jayk7CgogIFNDTV9WQUxJREFURV9PUEZQT1JU ICgxLCBzb2NrKTsKICBpbGV2ZWwgPSBzY21fdG9faW50IChsZXZlbCk7CiAgaW9wdG5hbWUgPSBz Y21fdG9faW50IChvcHRuYW1lKTsKCiAgZmQgPSBTQ01fRlBPUlRfRkRFUyAoc29jayk7CiAgCiAg aWYgKGlsZXZlbCA9PSBTT0xfU09DS0VUKQogICAgewojaWZkZWYgU09fTElOR0VSCiAgICAgIGlm IChpb3B0bmFtZSA9PSBTT19MSU5HRVIpCgl7CiNpZmRlZiBIQVZFX1NUUlVDVF9MSU5HRVIKCSAg U0NNX0FTU0VSVCAoc2NtX2lzX3BhaXIgKHZhbHVlKSwgdmFsdWUsIFNDTV9BUkc0LCBGVU5DX05B TUUpOwoJICBvcHRfbGluZ2VyLmxfb25vZmYgPSBzY21fdG9faW50IChTQ01fQ0FSICh2YWx1ZSkp OwoJICBvcHRfbGluZ2VyLmxfbGluZ2VyID0gc2NtX3RvX2ludCAoU0NNX0NEUiAodmFsdWUpKTsK CSAgb3B0bGVuID0gc2l6ZW9mIChzdHJ1Y3QgbGluZ2VyKTsKCSAgb3B0dmFsID0gJm9wdF9saW5n ZXI7CiNlbHNlCgkgIFNDTV9BU1NFUlQgKHNjbV9pc19wYWlyICh2YWx1ZSksIHZhbHVlLCBTQ01f QVJHNCwgRlVOQ19OQU1FKTsKCSAgb3B0X2ludCA9IHNjbV90b19pbnQgKFNDTV9DQVIgKHZhbHVl KSk7CgkgIC8qIHRpbWVvdXQgaXMgaWdub3JlZCwgYnV0IG1heSBhcyB3ZWxsIHZhbGlkYXRlIGl0 LiAgKi8KCSAgc2NtX3RvX2ludCAoU0NNX0NEUiAodmFsdWUpKTsKCSAgb3B0bGVuID0gc2l6ZW9m IChpbnQpOwoJICBvcHR2YWwgPSAmb3B0X2ludDsKI2VuZGlmCgl9CiAgICAgIGVsc2UKI2VuZGlm CglpZiAoMAojaWZkZWYgU09fU05EQlVGCgkgICAgfHwgaW9wdG5hbWUgPT0gU09fU05EQlVGCiNl bmRpZgojaWZkZWYgU09fUkNWQlVGCgkgICAgfHwgaW9wdG5hbWUgPT0gU09fUkNWQlVGCiNlbmRp ZgoJICAgICkKCSAgewoJICAgIG9wdF9pbnQgPSBzY21fdG9faW50ICh2YWx1ZSk7CgkgICAgb3B0 bGVuID0gc2l6ZW9mIChzaXplX3QpOwoJICAgIG9wdHZhbCA9ICZvcHRfaW50OwoJICB9CiAgICB9 CgojaWZkZWYgSEFWRV9TVFJVQ1RfSVBfTVJFUQogIGlmIChpbGV2ZWwgPT0gSVBQUk9UT19JUCAm JgogICAgICAoaW9wdG5hbWUgPT0gSVBfQUREX01FTUJFUlNISVAgfHwgaW9wdG5hbWUgPT0gSVBf RFJPUF9NRU1CRVJTSElQKSkKICAgIHsKICAgICAgLyogRm91cnRoIGFyZ3VtZW50IG11c3QgYmUg YSBwYWlyIG9mIGFkZHJlc3Nlcy4gKi8KICAgICAgU0NNX0FTU0VSVCAoc2NtX2lzX3BhaXIgKHZh bHVlKSwgdmFsdWUsIFNDTV9BUkc0LCBGVU5DX05BTUUpOwogICAgICBvcHRfbXJlcS5pbXJfbXVs dGlhZGRyLnNfYWRkciA9IGh0b25sIChzY21fdG9fdWxvbmcgKFNDTV9DQVIgKHZhbHVlKSkpOwog ICAgICBvcHRfbXJlcS5pbXJfaW50ZXJmYWNlLnNfYWRkciA9IGh0b25sIChzY21fdG9fdWxvbmcg KFNDTV9DRFIgKHZhbHVlKSkpOwogICAgICBvcHRsZW4gPSBzaXplb2YgKG9wdF9tcmVxKTsKICAg ICAgb3B0dmFsID0gJm9wdF9tcmVxOwogICAgfQojZW5kaWYKCiAgaWYgKG9wdHZhbCA9PSBOVUxM KQogICAgewogICAgICAvKiBNb3N0IG9wdGlvbnMgdGFrZSBhbiBpbnQuICAqLwogICAgICBvcHRf aW50ID0gc2NtX3RvX2ludCAodmFsdWUpOwogICAgICBvcHRsZW4gPSBzaXplb2YgKGludCk7CiAg ICAgIG9wdHZhbCA9ICZvcHRfaW50OwogICAgfQoKICBpZiAoc2V0c29ja29wdCAoZmQsIGlsZXZl bCwgaW9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKSA9PSAtMSkKICAgIFNDTV9TWVNFUlJPUjsKICBy ZXR1cm4gU0NNX1VOU1BFQ0lGSUVEOwp9CiN1bmRlZiBGVU5DX05BTUUKClNDTV9ERUZJTkUgKHNj bV9zaHV0ZG93biwgInNodXRkb3duIiwgMiwgMCwgMCwKICAgICAgICAgIChTQ00gc29jaywgU0NN IGhvdyksCgkgICAgIlNvY2tldHMgY2FuIGJlIGNsb3NlZCBzaW1wbHkgYnkgdXNpbmcgQGNvZGV7 Y2xvc2UtcG9ydH0uIFRoZVxuIgoJICAgICJAY29kZXtzaHV0ZG93bn0gcHJvY2VkdXJlIGFsbG93 cyByZWNlcHRpb24gb3IgdHJhbnNtaXNzaW9uIG9uIGFcbiIKCSAgICAiY29ubmVjdGlvbiB0byBi ZSBzaHV0IGRvd24gaW5kaXZpZHVhbGx5LCBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlclxuIgoJ ICAgICJAdmFye2hvd306XG5cbiIKCSAgICAiQHRhYmxlIEBhc2lzXG4iCgkgICAgIkBpdGVtIDBc biIKCSAgICAiU3RvcCByZWNlaXZpbmcgZGF0YSBmb3IgdGhpcyBzb2NrZXQuICBJZiBmdXJ0aGVy IGRhdGEgYXJyaXZlcywgIHJlamVjdCBpdC5cbiIKCSAgICAiQGl0ZW0gMVxuIgoJICAgICJTdG9w IHRyeWluZyB0byB0cmFuc21pdCBkYXRhIGZyb20gdGhpcyBzb2NrZXQuICBEaXNjYXJkIGFueVxu IgoJICAgICJkYXRhIHdhaXRpbmcgdG8gYmUgc2VudC4gIFN0b3AgbG9va2luZyBmb3IgYWNrbm93 bGVkZ2VtZW50IG9mXG4iCgkgICAgImRhdGEgYWxyZWFkeSBzZW50OyBkb24ndCByZXRyYW5zbWl0 IGl0IGlmIGl0IGlzIGxvc3QuXG4iCgkgICAgIkBpdGVtIDJcbiIKCSAgICAiU3RvcCBib3RoIHJl Y2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uLlxuIgoJICAgICJAZW5kIHRhYmxlXG5cbiIKCSAgICAi VGhlIHJldHVybiB2YWx1ZSBpcyB1bnNwZWNpZmllZC4iKQojZGVmaW5lIEZVTkNfTkFNRSBzX3Nj bV9zaHV0ZG93bgp7CiAgaW50IGZkOwogIHNvY2sgPSBTQ01fQ09FUkNFX09VVFBPUlQgKHNvY2sp OwogIFNDTV9WQUxJREFURV9PUEZQT1JUICgxLCBzb2NrKTsKICBmZCA9IFNDTV9GUE9SVF9GREVT IChzb2NrKTsKICBpZiAoc2h1dGRvd24gKGZkLCBzY21fdG9fc2lnbmVkX2ludGVnZXIgKGhvdywg MCwgMikpID09IC0xKQogICAgU0NNX1NZU0VSUk9SOwogIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7 Cn0KI3VuZGVmIEZVTkNfTkFNRQoKLyogY29udmVydCBmYW0vYWRkcmVzcy9hcmdzIGludG8gYSBz b2NrYWRkciBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KICAgYXJncyBpcyBtb2RpZmllZCBieSBy ZW1vdmluZyB0aGUgYXJndW1lbnRzIGFjdHVhbGx5IHVzZWQuCiAgIHdoaWNoX2FyZyBhbmQgcHJv YyBhcmUgdXNlZCB3aGVuIHJlcG9ydGluZyBlcnJvcnM6CiAgIHdoaWNoX2FyZyBpcyB0aGUgcG9z aXRpb24gb2YgYWRkcmVzcyBpbiB0aGUgb3JpZ2luYWwgYXJndW1lbnQgbGlzdC4KICAgcHJvYyBp cyB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlLgogICBzaXplIHJldHVybnMgdGhl IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBhbGxvY2F0ZWQuICAqLwoKc3RhdGljIHN0cnVjdCBzb2Nr YWRkciAqCnNjbV9maWxsX3NvY2thZGRyIChpbnQgZmFtLCBTQ00gYWRkcmVzcywgU0NNICphcmdz LCBpbnQgd2hpY2hfYXJnLAoJCSAgIGNvbnN0IGNoYXIgKnByb2MsIHNpemVfdCAqc2l6ZSkKI2Rl ZmluZSBGVU5DX05BTUUgcHJvYwp7CiAgc3dpdGNoIChmYW0pCiAgICB7CiAgICBjYXNlIEFGX0lO RVQ6CiAgICAgIHsKCXN0cnVjdCBzb2NrYWRkcl9pbiAqc29rYTsKCXVuc2lnbmVkIGxvbmcgYWRk cjsKCWludCBwb3J0OwoKCVNDTV9WQUxJREFURV9VTE9OR19DT1BZICh3aGljaF9hcmcsIGFkZHJl c3MsIGFkZHIpOwoJU0NNX1ZBTElEQVRFX0NPTlMgKHdoaWNoX2FyZyArIDEsICphcmdzKTsKCXBv cnQgPSBzY21fdG9faW50IChTQ01fQ0FSICgqYXJncykpOwoJKmFyZ3MgPSBTQ01fQ0RSICgqYXJn cyk7Cglzb2thID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzY21fbWFsbG9jIChzaXplb2YgKHN0 cnVjdCBzb2NrYWRkcl9pbikpOwogICAgICAgIG1lbXNldCAoc29rYSwgJ1wwJywgc2l6ZW9mIChz dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKCiNpZmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTl9TSU5f TEVOCglzb2thLT5zaW5fbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pOwojZW5kaWYK CXNva2EtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwoJc29rYS0+c2luX2FkZHIuc19hZGRyID0gaHRv bmwgKGFkZHIpOwoJc29rYS0+c2luX3BvcnQgPSBodG9ucyAocG9ydCk7Cgkqc2l6ZSA9IHNpemVv ZiAoc3RydWN0IHNvY2thZGRyX2luKTsKCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopIHNva2E7 CiAgICAgIH0KI2lmZGVmIEhBVkVfSVBWNgogICAgY2FzZSBBRl9JTkVUNjoKICAgICAgewoJLyog c2VlIFJGQzI1NTMuICAqLwoJaW50IHBvcnQ7CglzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzb2thOwoJ dW5zaWduZWQgbG9uZyBmbG93aW5mbyA9IDA7Cgl1bnNpZ25lZCBsb25nIHNjb3BlX2lkID0gMDsK CglTQ01fVkFMSURBVEVfQ09OUyAod2hpY2hfYXJnICsgMSwgKmFyZ3MpOwoJcG9ydCA9IHNjbV90 b19pbnQgKFNDTV9DQVIgKCphcmdzKSk7CgkqYXJncyA9IFNDTV9DRFIgKCphcmdzKTsKCWlmIChz Y21faXNfcGFpciAoKmFyZ3MpKQoJICB7CgkgICAgU0NNX1ZBTElEQVRFX1VMT05HX0NPUFkgKHdo aWNoX2FyZyArIDIsIFNDTV9DQVIgKCphcmdzKSwgZmxvd2luZm8pOwoJICAgICphcmdzID0gU0NN X0NEUiAoKmFyZ3MpOwoJICAgIGlmIChzY21faXNfcGFpciAoKmFyZ3MpKQoJICAgICAgewoJCVND TV9WQUxJREFURV9VTE9OR19DT1BZICh3aGljaF9hcmcgKyAzLCBTQ01fQ0FSICgqYXJncyksCgkJ CQkJIHNjb3BlX2lkKTsKCQkqYXJncyA9IFNDTV9DRFIgKCphcmdzKTsKCSAgICAgIH0KCSAgfQoJ c29rYSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNjbV9tYWxsb2MgKHNpemVvZiAoc3RydWN0 IHNvY2thZGRyX2luNikpOwoKI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X0xF TgoJc29rYS0+c2luNl9sZW4gPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwojZW5kaWYK CXNva2EtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CglzY21fdG9faXB2NiAoc29rYS0+c2luNl9h ZGRyLnM2X2FkZHIsIGFkZHJlc3MpOwoJc29rYS0+c2luNl9wb3J0ID0gaHRvbnMgKHBvcnQpOwoJ c29rYS0+c2luNl9mbG93aW5mbyA9IGZsb3dpbmZvOwojaWZkZWYgSEFWRV9TSU42X1NDT1BFX0lE Cglzb2thLT5zaW42X3Njb3BlX2lkID0gc2NvcGVfaWQ7CiNlbmRpZgoJKnNpemUgPSBzaXplb2Yg KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwoJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikgc29rYTsK ICAgICAgfQojZW5kaWYKI2lmZGVmIEhBVkVfVU5JWF9ET01BSU5fU09DS0VUUwogICAgY2FzZSBB Rl9VTklYOgogICAgICB7CglzdHJ1Y3Qgc29ja2FkZHJfdW4gKnNva2E7CglpbnQgYWRkcl9zaXpl OwoJY2hhciAqY19hZGRyZXNzOwoKCXNjbV9keW53aW5kX2JlZ2luICgwKTsKCgljX2FkZHJlc3Mg PSBzY21fdG9fbG9jYWxlX3N0cmluZyAoYWRkcmVzcyk7CglzY21fZHlud2luZF9mcmVlIChjX2Fk ZHJlc3MpOwoKCS8qIHRoZSBzdGF0aWMgYnVmZmVyIHNpemUgaW4gc29ja2FkZHJfdW4gc2VlbXMg dG8gYmUgYXJiaXRyYXJ5CgkgICBhbmQgbm90IG5lY2Vzc2FyaWx5IGEgaGFyZCBsaW1pdC4gIGUu Zy4sIHRoZSBnbGliYyBtYW51YWwKCSAgIHN1Z2dlc3RzIGl0IG1heSBiZSBwb3NzaWJsZSB0byBk ZWNsYXJlIGl0IHNpemUgMC4gIGxldCdzCgkgICBpZ25vcmUgaXQuICBpZiB0aGUgTy9TIGRvZXNu J3QgbGlrZSB0aGUgc2l6ZSBpdCB3aWxsIGNhdXNlCgkgICBjb25uZWN0L2JpbmQgZXRjLiwgdG8g ZmFpbC4gIHN1bl9wYXRoIGlzIGFsd2F5cyB0aGUgbGFzdAoJICAgbWVtYmVyIG9mIHRoZSBzdHJ1 Y3R1cmUuICAqLwoJYWRkcl9zaXplID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfdW4pCgkgICsg bWF4ICgwLCBzdHJsZW4gKGNfYWRkcmVzcykgKyAxIC0gKHNpemVvZiBzb2thLT5zdW5fcGF0aCkp OwoJc29rYSA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgc2NtX21hbGxvYyAoYWRkcl9zaXplKTsK CW1lbXNldCAoc29rYSwgMCwgYWRkcl9zaXplKTsgIC8qIGZvciBzdW5fbGVuOiBzZWUgc2luX2xl biBhYm92ZS4gKi8KCXNva2EtPnN1bl9mYW1pbHkgPSBBRl9VTklYOwoJc3RyY3B5IChzb2thLT5z dW5fcGF0aCwgY19hZGRyZXNzKTsKCSpzaXplID0gU1VOX0xFTiAoc29rYSk7CgoJc2NtX2R5bndp bmRfZW5kICgpOwoJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikgc29rYTsKICAgICAgfQojZW5k aWYKICAgIGRlZmF1bHQ6CiAgICAgIHNjbV9vdXRfb2ZfcmFuZ2UgKHByb2MsIHNjbV9mcm9tX2lu dCAoZmFtKSk7CiAgICB9Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NNX0RFRklORSAoc2NtX2Nvbm5l Y3QsICJjb25uZWN0IiwgMiwgMSwgMSwKICAgICAgICAgICAgKFNDTSBzb2NrLCBTQ00gZmFtX29y X3NvY2thZGRyLCBTQ00gYWRkcmVzcywgU0NNIGFyZ3MpLAoJICAgICJJbml0aWF0ZSBhIGNvbm5l Y3Rpb24gZnJvbSBhIHNvY2tldCB1c2luZyBhIHNwZWNpZmllZCBhZGRyZXNzXG4iCgkgICAgImZh bWlseSB0byB0aGUgYWRkcmVzc1xuIgoJICAgICJzcGVjaWZpZWQgYnkgQHZhcnthZGRyZXNzfSBh bmQgcG9zc2libHkgQHZhcnthcmdzfS5cbiIKCSAgICAiVGhlIGZvcm1hdCByZXF1aXJlZCBmb3Ig QHZhcnthZGRyZXNzfVxuIgoJICAgICJhbmQgQHZhcnthcmdzfSBkZXBlbmRzIG9uIHRoZSBmYW1p bHkgb2YgdGhlIHNvY2tldC5cblxuIgoJICAgICJGb3IgYSBzb2NrZXQgb2YgZmFtaWx5IEBjb2Rl e0FGX1VOSVh9LFxuIgoJICAgICJvbmx5IEB2YXJ7YWRkcmVzc30gaXMgc3BlY2lmaWVkIGFuZCBt dXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlXG4iCgkgICAgImZpbGVuYW1lIHdoZXJlIHRoZSBzb2Nr ZXQgaXMgdG8gYmUgY3JlYXRlZC5cblxuIgoJICAgICJGb3IgYSBzb2NrZXQgb2YgZmFtaWx5IEBj b2Rle0FGX0lORVR9LFxuIgoJICAgICJAdmFye2FkZHJlc3N9IG11c3QgYmUgYW4gaW50ZWdlciBJ UHY0IGhvc3QgYWRkcmVzcyBhbmRcbiIKCSAgICAiQHZhcnthcmdzfSBtdXN0IGJlIGEgc2luZ2xl IGludGVnZXIgcG9ydCBudW1iZXIuXG5cbiIKCSAgICAiRm9yIGEgc29ja2V0IG9mIGZhbWlseSBA Y29kZXtBRl9JTkVUNn0sXG4iCgkgICAgIkB2YXJ7YWRkcmVzc30gbXVzdCBiZSBhbiBpbnRlZ2Vy IElQdjYgaG9zdCBhZGRyZXNzIGFuZFxuIgoJICAgICJAdmFye2FyZ3N9IG1heSBiZSB1cCB0byB0 aHJlZSBpbnRlZ2VyczpcbiIKCSAgICAicG9ydCBbZmxvd2luZm9dIFtzY29wZV9pZF0sXG4iCgkg ICAgIndoZXJlIGZsb3dpbmZvIGFuZCBzY29wZV9pZCBkZWZhdWx0IHRvIHplcm8uXG5cbiIKCSAg ICAiQWx0ZXJuYXRpdmVseSwgdGhlIHNlY29uZCBhcmd1bWVudCBjYW4gYmUgYSBzb2NrZXQgYWRk cmVzcyBvYmplY3QgIgoJICAgICJhcyByZXR1cm5lZCBieSBAY29kZXttYWtlLXNvY2tldC1hZGRy ZXNzfSwgaW4gd2hpY2ggY2FzZSB0aGUgIgoJICAgICJubyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBz aG91bGQgYmUgcGFzc2VkLlxuXG4iCgkgICAgIlRoZSByZXR1cm4gdmFsdWUgaXMgdW5zcGVjaWZp ZWQuIikKI2RlZmluZSBGVU5DX05BTUUgc19zY21fY29ubmVjdAp7CiAgaW50IGZkOwogIHN0cnVj dCBzb2NrYWRkciAqc29rYTsKICBzaXplX3Qgc2l6ZTsKCiAgc29jayA9IFNDTV9DT0VSQ0VfT1VU UE9SVCAoc29jayk7CiAgU0NNX1ZBTElEQVRFX09QRlBPUlQgKDEsIHNvY2spOwogIGZkID0gU0NN X0ZQT1JUX0ZERVMgKHNvY2spOwoKICBpZiAoc2NtX2lzX2VxIChhZGRyZXNzLCBTQ01fVU5ERUZJ TkVEKSkKICAgIC8qIE5vIHRoaXJkIGFyZ3VtZW50IHdhcyBwYXNzZWQgdG8gRkFNX09SX1NPQ0tB RERSIG11c3QgYWN0dWFsbHkgYmUgYQogICAgICAgYHNvY2tldCBhZGRyZXNzJyBvYmplY3QuICAq LwogICAgc29rYSA9IHNjbV90b19zb2NrYWRkciAoZmFtX29yX3NvY2thZGRyLCAmc2l6ZSk7CiAg ZWxzZQogICAgc29rYSA9IHNjbV9maWxsX3NvY2thZGRyIChzY21fdG9faW50IChmYW1fb3Jfc29j a2FkZHIpLCBhZGRyZXNzLAoJCQkgICAgICAmYXJncywgMywgRlVOQ19OQU1FLCAmc2l6ZSk7Cgog IGlmIChjb25uZWN0IChmZCwgc29rYSwgc2l6ZSkgPT0gLTEpCiAgICB7CiAgICAgIGludCBzYXZl X2Vycm5vID0gZXJybm87CgogICAgICBmcmVlIChzb2thKTsKICAgICAgZXJybm8gPSBzYXZlX2Vy cm5vOwogICAgICBTQ01fU1lTRVJST1I7CiAgICB9CiAgZnJlZSAoc29rYSk7CiAgcmV0dXJuIFND TV9VTlNQRUNJRklFRDsKfQojdW5kZWYgRlVOQ19OQU1FCgpTQ01fREVGSU5FIChzY21fYmluZCwg ImJpbmQiLCAyLCAxLCAxLAogICAgICAgICAgICAoU0NNIHNvY2ssIFNDTSBmYW1fb3Jfc29ja2Fk ZHIsIFNDTSBhZGRyZXNzLCBTQ00gYXJncyksCgkgICAgIkFzc2lnbiBhbiBhZGRyZXNzIHRvIHRo ZSBzb2NrZXQgcG9ydCBAdmFye3NvY2t9LlxuIgoJICAgICJHZW5lcmFsbHkgdGhpcyBvbmx5IG5l ZWRzIHRvIGJlIGRvbmUgZm9yIHNlcnZlciBzb2NrZXRzLFxuIgoJICAgICJzbyB0aGV5IGtub3cg d2hlcmUgdG8gbG9vayBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuICBBIHNvY2tldFxuIgoJICAg ICJ3aXRob3V0IGFuIGFkZHJlc3Mgd2lsbCBiZSBhc3NpZ25lZCBvbmUgYXV0b21hdGljYWxseSB3 aGVuIGl0XG4iCgkgICAgInN0YXJ0cyBjb21tdW5pY2F0aW5nLlxuXG4iCgkgICAgIlRoZSBmb3Jt YXQgb2YgQHZhcnthZGRyZXNzfSBhbmQgQHZhcnthcmdzfSBkZXBlbmRzXG4iCgkgICAgIm9uIHRo ZSBmYW1pbHkgb2YgdGhlIHNvY2tldC5cblxuIgoJICAgICJGb3IgYSBzb2NrZXQgb2YgZmFtaWx5 IEBjb2Rle0FGX1VOSVh9LCBvbmx5IEB2YXJ7YWRkcmVzc31cbiIKCSAgICAiaXMgc3BlY2lmaWVk IGFuZCBtdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGZpbGVuYW1lIHdoZXJlXG4iCgkgICAgInRo ZSBzb2NrZXQgaXMgdG8gYmUgY3JlYXRlZC5cblxuIgoJICAgICJGb3IgYSBzb2NrZXQgb2YgZmFt aWx5IEBjb2Rle0FGX0lORVR9LCBAdmFye2FkZHJlc3N9XG4iCgkgICAgIm11c3QgYmUgYW4gaW50 ZWdlciBJUHY0IGFkZHJlc3MgYW5kIEB2YXJ7YXJnc31cbiIKCSAgICAibXVzdCBiZSBhIHNpbmds ZSBpbnRlZ2VyIHBvcnQgbnVtYmVyLlxuXG4iCgkgICAgIlRoZSB2YWx1ZXMgb2YgdGhlIGZvbGxv d2luZyB2YXJpYWJsZXMgY2FuIGFsc28gYmUgdXNlZCBmb3JcbiIKCSAgICAiQHZhcnthZGRyZXNz fTpcblxuIgoJICAgICJAZGVmdmFyIElOQUREUl9BTllcbiIKCSAgICAiQWxsb3cgY29ubmVjdGlv bnMgZnJvbSBhbnkgYWRkcmVzcy5cbiIKCSAgICAiQGVuZCBkZWZ2YXJcblxuIgoJICAgICJAZGVm dmFyIElOQUREUl9MT09QQkFDS1xuIgoJICAgICJUaGUgYWRkcmVzcyBvZiB0aGUgbG9jYWwgaG9z dCB1c2luZyB0aGUgbG9vcGJhY2sgZGV2aWNlLlxuIgoJICAgICJAZW5kIGRlZnZhclxuXG4iCgkg ICAgIkBkZWZ2YXIgSU5BRERSX0JST0FEQ0FTVFxuIgoJICAgICJUaGUgYnJvYWRjYXN0IGFkZHJl c3Mgb24gdGhlIGxvY2FsIG5ldHdvcmsuXG4iCgkgICAgIkBlbmQgZGVmdmFyXG5cbiIKCSAgICAi QGRlZnZhciBJTkFERFJfTk9ORVxuIgoJICAgICJObyBhZGRyZXNzLlxuIgoJICAgICJAZW5kIGRl ZnZhclxuXG4iCgkgICAgIkZvciBhIHNvY2tldCBvZiBmYW1pbHkgQGNvZGV7QUZfSU5FVDZ9LCBA dmFye2FkZHJlc3N9XG4iCgkgICAgIm11c3QgYmUgYW4gaW50ZWdlciBJUHY2IGFkZHJlc3MgYW5k IEB2YXJ7YXJnc31cbiIKCSAgICAibWF5IGJlIHVwIHRvIHRocmVlIGludGVnZXJzOlxuIgoJICAg ICJwb3J0IFtmbG93aW5mb10gW3Njb3BlX2lkXSxcbiIKCSAgICAid2hlcmUgZmxvd2luZm8gYW5k IHNjb3BlX2lkIGRlZmF1bHQgdG8gemVyby5cblxuIgoJICAgICJBbHRlcm5hdGl2ZWx5LCB0aGUg c2Vjb25kIGFyZ3VtZW50IGNhbiBiZSBhIHNvY2tldCBhZGRyZXNzIG9iamVjdCAiCgkgICAgImFz IHJldHVybmVkIGJ5IEBjb2Rle21ha2Utc29ja2V0LWFkZHJlc3N9LCBpbiB3aGljaCBjYXNlIHRo ZSAiCgkgICAgIm5vIGFkZGl0aW9uYWwgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQuXG5cbiIK CSAgICAiVGhlIHJldHVybiB2YWx1ZSBpcyB1bnNwZWNpZmllZC4iKQojZGVmaW5lIEZVTkNfTkFN RSBzX3NjbV9iaW5kCnsKICBzdHJ1Y3Qgc29ja2FkZHIgKnNva2E7CiAgc2l6ZV90IHNpemU7CiAg aW50IGZkOwoKICBzb2NrID0gU0NNX0NPRVJDRV9PVVRQT1JUIChzb2NrKTsKICBTQ01fVkFMSURB VEVfT1BGUE9SVCAoMSwgc29jayk7CiAgZmQgPSBTQ01fRlBPUlRfRkRFUyAoc29jayk7CgogIGlm IChzY21faXNfZXEgKGFkZHJlc3MsIFNDTV9VTkRFRklORUQpKQogICAgLyogTm8gdGhpcmQgYXJn dW1lbnQgd2FzIHBhc3NlZCB0byBGQU1fT1JfU09DS0FERFIgbXVzdCBhY3R1YWxseSBiZSBhCiAg ICAgICBgc29ja2V0IGFkZHJlc3MnIG9iamVjdC4gICovCiAgICBzb2thID0gc2NtX3RvX3NvY2th ZGRyIChmYW1fb3Jfc29ja2FkZHIsICZzaXplKTsKICBlbHNlCiAgICBzb2thID0gc2NtX2ZpbGxf c29ja2FkZHIgKHNjbV90b19pbnQgKGZhbV9vcl9zb2NrYWRkciksIGFkZHJlc3MsCgkJCSAgICAg ICZhcmdzLCAzLCBGVU5DX05BTUUsICZzaXplKTsKCgogIGlmIChiaW5kIChmZCwgc29rYSwgc2l6 ZSkgPT0gLTEpCiAgewogICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKCiAgICBmcmVlIChzb2th KTsKICAgIGVycm5vID0gc2F2ZV9lcnJubzsKICAgIFNDTV9TWVNFUlJPUjsKICB9CiAgZnJlZSAo c29rYSk7CiAgcmV0dXJuIFNDTV9VTlNQRUNJRklFRDsKfQojdW5kZWYgRlVOQ19OQU1FCgpTQ01f REVGSU5FIChzY21fbGlzdGVuLCAibGlzdGVuIiwgMiwgMCwgMCwKICAgICAgICAgICAgKFNDTSBz b2NrLCBTQ00gYmFja2xvZyksCgkgICAgIkVuYWJsZSBAdmFye3NvY2t9IHRvIGFjY2VwdCBjb25u ZWN0aW9uXG4iCgkgICAgInJlcXVlc3RzLiAgQHZhcntiYWNrbG9nfSBpcyBhbiBpbnRlZ2VyIHNw ZWNpZnlpbmdcbiIKCSAgICAidGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBxdWV1ZSBmb3IgcGVu ZGluZyBjb25uZWN0aW9ucy5cbiIKCSAgICAiSWYgdGhlIHF1ZXVlIGZpbGxzLCBuZXcgY2xpZW50 cyB3aWxsIGZhaWwgdG8gY29ubmVjdCB1bnRpbFxuIgoJICAgICJ0aGUgc2VydmVyIGNhbGxzIEBj b2Rle2FjY2VwdH0gdG8gYWNjZXB0IGEgY29ubmVjdGlvbiBmcm9tXG4iCgkgICAgInRoZSBxdWV1 ZS5cblxuIgoJICAgICJUaGUgcmV0dXJuIHZhbHVlIGlzIHVuc3BlY2lmaWVkLiIpCiNkZWZpbmUg RlVOQ19OQU1FIHNfc2NtX2xpc3Rlbgp7CiAgaW50IGZkOwogIHNvY2sgPSBTQ01fQ09FUkNFX09V VFBPUlQgKHNvY2spOwogIFNDTV9WQUxJREFURV9PUEZQT1JUICgxLCBzb2NrKTsKICBmZCA9IFND TV9GUE9SVF9GREVTIChzb2NrKTsKICBpZiAobGlzdGVuIChmZCwgc2NtX3RvX2ludCAoYmFja2xv ZykpID09IC0xKQogICAgU0NNX1NZU0VSUk9SOwogIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7Cn0K I3VuZGVmIEZVTkNfTkFNRQoKLyogUHV0IHRoZSBjb21wb25lbnRzIG9mIGEgc29ja2FkZHIgaW50 byBhIG5ldyBTQ00gdmVjdG9yLiAgKi8Kc3RhdGljIFNDTV9DX0lOTElORV9LRVlXT1JEIFNDTQpf c2NtX2Zyb21fc29ja2FkZHIgKGNvbnN0IHNjbV90X21heF9zb2NrYWRkciAqYWRkcmVzcywgdW5z aWduZWQgYWRkcl9zaXplLAoJCSAgICBjb25zdCBjaGFyICpwcm9jKQp7CiAgU0NNIHJlc3VsdCA9 IFNDTV9FT0w7CiAgc2hvcnQgaW50IGZhbSA9ICgoc3RydWN0IHNvY2thZGRyICopIGFkZHJlc3Mp LT5zYV9mYW1pbHk7CgogIHN3aXRjaCAoZmFtKQogICAgewogICAgY2FzZSBBRl9JTkVUOgogICAg ICB7Cgljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKm5hZCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g KikgYWRkcmVzczsKCglyZXN1bHQgPSBzY21fY19tYWtlX3ZlY3RvciAoMywgU0NNX1VOU1BFQ0lG SUVEKTsKCglTQ01fU0lNUExFX1ZFQ1RPUl9TRVQocmVzdWx0LCAwLAoJCQkgICAgICBzY21fZnJv bV9zaG9ydCAoZmFtKSk7CglTQ01fU0lNUExFX1ZFQ1RPUl9TRVQocmVzdWx0LCAxLAoJCQkgICAg ICBzY21fZnJvbV91bG9uZyAobnRvaGwgKG5hZC0+c2luX2FkZHIuc19hZGRyKSkpOwoJU0NNX1NJ TVBMRV9WRUNUT1JfU0VUKHJlc3VsdCwgMiwKCQkJICAgICAgc2NtX2Zyb21fdXNob3J0IChudG9o cyAobmFkLT5zaW5fcG9ydCkpKTsKICAgICAgfQogICAgICBicmVhazsKI2lmZGVmIEhBVkVfSVBW NgogICAgY2FzZSBBRl9JTkVUNjoKICAgICAgewoJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAq bmFkID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcmVzczsKCglyZXN1bHQgPSBzY21fY19t YWtlX3ZlY3RvciAoNSwgU0NNX1VOU1BFQ0lGSUVEKTsKCVNDTV9TSU1QTEVfVkVDVE9SX1NFVChy ZXN1bHQsIDAsIHNjbV9mcm9tX3Nob3J0IChmYW0pKTsKCVNDTV9TSU1QTEVfVkVDVE9SX1NFVChy ZXN1bHQsIDEsIHNjbV9mcm9tX2lwdjYgKG5hZC0+c2luNl9hZGRyLnM2X2FkZHIpKTsKCVNDTV9T SU1QTEVfVkVDVE9SX1NFVChyZXN1bHQsIDIsIHNjbV9mcm9tX3VzaG9ydCAobnRvaHMgKG5hZC0+ c2luNl9wb3J0KSkpOwoJU0NNX1NJTVBMRV9WRUNUT1JfU0VUKHJlc3VsdCwgMywgc2NtX2Zyb21f dWludDMyIChuYWQtPnNpbjZfZmxvd2luZm8pKTsKI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAoJ U0NNX1NJTVBMRV9WRUNUT1JfU0VUKHJlc3VsdCwgNCwgc2NtX2Zyb21fdWxvbmcgKG5hZC0+c2lu Nl9zY29wZV9pZCkpOwojZWxzZQoJU0NNX1NJTVBMRV9WRUNUT1JfU0VUKHJlc3VsdCwgNCwgU0NN X0lOVU0wKTsKI2VuZGlmCiAgICAgIH0KICAgICAgYnJlYWs7CiNlbmRpZgojaWZkZWYgSEFWRV9V TklYX0RPTUFJTl9TT0NLRVRTCiAgICBjYXNlIEFGX1VOSVg6CiAgICAgIHsKCWNvbnN0IHN0cnVj dCBzb2NrYWRkcl91biAqbmFkID0gKHN0cnVjdCBzb2NrYWRkcl91biAqKSBhZGRyZXNzOwoKCXJl c3VsdCA9IHNjbV9jX21ha2VfdmVjdG9yICgyLCBTQ01fVU5TUEVDSUZJRUQpOwoKCVNDTV9TSU1Q TEVfVkVDVE9SX1NFVChyZXN1bHQsIDAsIHNjbV9mcm9tX3Nob3J0IChmYW0pKTsKCS8qIFdoZW4g YWRkcl9zaXplIGlzIG5vdCBlbm91Z2ggdG8gY292ZXIgc3VuX3BhdGgsIGRvIG5vdCB0cnkKCSAg IHRvIGFjY2VzcyBpdC4gKi8KCWlmIChhZGRyX3NpemUgPD0gb2Zmc2V0b2YgKHN0cnVjdCBzb2Nr YWRkcl91biwgc3VuX3BhdGgpKQoJICBTQ01fU0lNUExFX1ZFQ1RPUl9TRVQocmVzdWx0LCAxLCBT Q01fQk9PTF9GKTsKCWVsc2UKCSAgU0NNX1NJTVBMRV9WRUNUT1JfU0VUKHJlc3VsdCwgMSwgc2Nt X2Zyb21fbG9jYWxlX3N0cmluZyAobmFkLT5zdW5fcGF0aCkpOwogICAgICB9CiAgICAgIGJyZWFr OwojZW5kaWYKICAgIGRlZmF1bHQ6CiAgICAgIHJlc3VsdCA9IFNDTV9VTlNQRUNJRklFRDsKICAg ICAgc2NtX21pc2NfZXJyb3IgKHByb2MsICJ1bnJlY29nbmlzZWQgYWRkcmVzcyBmYW1pbHk6IH5B IiwKCQkgICAgICBzY21fbGlzdF8xIChzY21fZnJvbV9pbnQgKGZhbSkpKTsKCiAgICB9CiAgcmV0 dXJuIHJlc3VsdDsKfQoKLyogVGhlIHB1YmxpY2x5LXZpc2libGUgZnVuY3Rpb24uICBSZXR1cm4g YSBTY2hlbWUgb2JqZWN0IHJlcHJlc2VudGluZwogICBBRERSRVNTLCBhbiBhZGRyZXNzIG9mIEFE RFJfU0laRSBieXRlcy4gICovClNDTQpzY21fZnJvbV9zb2NrYWRkciAoY29uc3Qgc3RydWN0IHNv Y2thZGRyICphZGRyZXNzLCB1bnNpZ25lZCBhZGRyX3NpemUpCnsKICByZXR1cm4gKF9zY21fZnJv bV9zb2NrYWRkciAoKHNjbV90X21heF9zb2NrYWRkciAqKSBhZGRyZXNzLAoJCQkgICAgICBhZGRy X3NpemUsICJzY21fZnJvbV9zb2NrYWRkciIpKTsKfQoKLyogQ29udmVydCBBRERSRVNTLCBhbiBh ZGRyZXNzIG9iamVjdCByZXR1cm5lZCBieSBlaXRoZXIKICAgYHNjbV9mcm9tX3NvY2thZGRyICgp JyBvciBgc2NtX21ha2Vfc29ja2V0X2FkZHJlc3MgKCknLCBpbnRvIGl0cyBDCiAgIHJlcHJlc2Vu dGF0aW9uLiAgT24gc3VjY2VzcywgYSBub24tTlVMTCBwb2ludGVyIGlzIHJldHVybmVkIGFuZAog ICBBRERSRVNTX1NJWkUgaXMgdXBkYXRlZCB0byB0aGUgYWN0dWFsIHNpemUgKGluIGJ5dGVzKSBv ZiB0aGUgcmV0dXJuZWQKICAgYWRkcmVzcy4gIFRoZSByZXN1bHQgbXVzdCBldmVudHVhbGx5IGJl IGZyZWVkIHVzaW5nIGBmcmVlICgpJy4gICovCnN0cnVjdCBzb2NrYWRkciAqCnNjbV90b19zb2Nr YWRkciAoU0NNIGFkZHJlc3MsIHNpemVfdCAqYWRkcmVzc19zaXplKQojZGVmaW5lIEZVTkNfTkFN RSAic2NtX3RvX3NvY2thZGRyIgp7CiAgc2hvcnQgaW50IGZhbWlseTsKICBzdHJ1Y3Qgc29ja2Fk ZHIgKmNfYWRkcmVzcyA9IE5VTEw7CgogIFNDTV9WQUxJREFURV9WRUNUT1IgKDEsIGFkZHJlc3Mp OwoKICAqYWRkcmVzc19zaXplID0gMDsKICBmYW1pbHkgPSBzY21fdG9fc2hvcnQgKFNDTV9TSU1Q TEVfVkVDVE9SX1JFRiAoYWRkcmVzcywgMCkpOwoKICBzd2l0Y2ggKGZhbWlseSkKICAgIHsKICAg IGNhc2UgQUZfSU5FVDoKICAgICAgewoJaWYgKFNDTV9TSU1QTEVfVkVDVE9SX0xFTkdUSCAoYWRk cmVzcykgIT0gMykKCSAgc2NtX21pc2NfZXJyb3IgKEZVTkNfTkFNRSwKCQkJICAiaW52YWxpZCBp bmV0IGFkZHJlc3MgcmVwcmVzZW50YXRpb246IH5BIiwKCQkJICBzY21fbGlzdF8xIChhZGRyZXNz KSk7CgllbHNlCgkgIHsKCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY19pbmV0OwoKICAgICAgICAg ICAgbWVtc2V0ICgmY19pbmV0LCAnXDAnLCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbikpOwoK I2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lOX1NJTl9MRU4KICAgICAgICAgICAgY19pbmV0 LnNpbl9sZW4gPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbik7CiNlbmRpZgoKCSAgICBjX2lu ZXQuc2luX2FkZHIuc19hZGRyID0KCSAgICAgIGh0b25sIChzY21fdG9fdWxvbmcgKFNDTV9TSU1Q TEVfVkVDVE9SX1JFRiAoYWRkcmVzcywgMSkpKTsKCSAgICBjX2luZXQuc2luX3BvcnQgPQoJICAg ICAgaHRvbnMgKHNjbV90b191c2hvcnQgKFNDTV9TSU1QTEVfVkVDVE9SX1JFRiAoYWRkcmVzcywg MikpKTsKCSAgICBjX2luZXQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CgoJICAgICphZGRyZXNzX3Np emUgPSBzaXplb2YgKGNfaW5ldCk7CgkgICAgY19hZGRyZXNzID0gc2NtX21hbGxvYyAoc2l6ZW9m IChjX2luZXQpKTsKCSAgICBtZW1jcHkgKGNfYWRkcmVzcywgJmNfaW5ldCwgc2l6ZW9mIChjX2lu ZXQpKTsKCSAgfQoKCWJyZWFrOwogICAgICB9CgojaWZkZWYgSEFWRV9JUFY2CiAgICBjYXNlIEFG X0lORVQ2OgogICAgICB7CglpZiAoU0NNX1NJTVBMRV9WRUNUT1JfTEVOR1RIIChhZGRyZXNzKSAh PSA1KQoJICBzY21fbWlzY19lcnJvciAoRlVOQ19OQU1FLCAiaW52YWxpZCBpbmV0NiBhZGRyZXNz IHJlcHJlc2VudGF0aW9uOiB+QSIsCgkJCSAgc2NtX2xpc3RfMSAoYWRkcmVzcykpOwoJZWxzZQoJ ICB7CgkgICAgc3RydWN0IHNvY2thZGRyX2luNiBjX2luZXQ2OwoKCSAgICBzY21fdG9faXB2NiAo Y19pbmV0Ni5zaW42X2FkZHIuczZfYWRkciwKCQkJIFNDTV9TSU1QTEVfVkVDVE9SX1JFRiAoYWRk cmVzcywgMSkpOwoJICAgIGNfaW5ldDYuc2luNl9wb3J0ID0KCSAgICAgIGh0b25zIChzY21fdG9f dXNob3J0IChTQ01fU0lNUExFX1ZFQ1RPUl9SRUYgKGFkZHJlc3MsIDIpKSk7CgkgICAgY19pbmV0 Ni5zaW42X2Zsb3dpbmZvID0KCSAgICAgIHNjbV90b191aW50MzIgKFNDTV9TSU1QTEVfVkVDVE9S X1JFRiAoYWRkcmVzcywgMykpOwojaWZkZWYgSEFWRV9TSU42X1NDT1BFX0lECgkgICAgY19pbmV0 Ni5zaW42X3Njb3BlX2lkID0KCSAgICAgIHNjbV90b191bG9uZyAoU0NNX1NJTVBMRV9WRUNUT1Jf UkVGIChhZGRyZXNzLCA0KSk7CiNlbmRpZgoKCSAgICBjX2luZXQ2LnNpbjZfZmFtaWx5ID0gQUZf SU5FVDY7CgoJICAgICphZGRyZXNzX3NpemUgPSBzaXplb2YgKGNfaW5ldDYpOwoJICAgIGNfYWRk cmVzcyA9IHNjbV9tYWxsb2MgKHNpemVvZiAoY19pbmV0NikpOwoJICAgIG1lbWNweSAoY19hZGRy ZXNzLCAmY19pbmV0Niwgc2l6ZW9mIChjX2luZXQ2KSk7CgkgIH0KCglicmVhazsKICAgICAgfQoj ZW5kaWYKCiNpZmRlZiBIQVZFX1VOSVhfRE9NQUlOX1NPQ0tFVFMKICAgIGNhc2UgQUZfVU5JWDoK ICAgICAgewoJaWYgKFNDTV9TSU1QTEVfVkVDVE9SX0xFTkdUSCAoYWRkcmVzcykgIT0gMikKCSAg c2NtX21pc2NfZXJyb3IgKEZVTkNfTkFNRSwgImludmFsaWQgdW5peCBhZGRyZXNzIHJlcHJlc2Vu dGF0aW9uOiB+QSIsCgkJCSAgc2NtX2xpc3RfMSAoYWRkcmVzcykpOwoJZWxzZQoJICB7CgkgICAg U0NNIHBhdGg7CgkgICAgc2l6ZV90IHBhdGhfbGVuID0gMDsKCgkgICAgcGF0aCA9IFNDTV9TSU1Q TEVfVkVDVE9SX1JFRiAoYWRkcmVzcywgMSk7CgkgICAgaWYgKCFzY21faXNfc3RyaW5nIChwYXRo KSAmJiAhc2NtX2lzX2ZhbHNlIChwYXRoKSkKCSAgICAgIHNjbV9taXNjX2Vycm9yIChGVU5DX05B TUUsICJpbnZhbGlkIHVuaXggYWRkcmVzcyAiCgkJCSAgICAgICJwYXRoOiB+QSIsIHNjbV9saXN0 XzEgKHBhdGgpKTsKCSAgICBlbHNlCgkgICAgICB7CgkJc3RydWN0IHNvY2thZGRyX3VuIGNfdW5p eDsKCgkJaWYgKHNjbV9pc19mYWxzZSAocGF0aCkpCgkJICBwYXRoX2xlbiA9IDA7CgkJZWxzZQoJ CSAgcGF0aF9sZW4gPSBzY21fY19zdHJpbmdfbGVuZ3RoIChwYXRoKTsKCiNpZmRlZiBVTklYX1BB VEhfTUFYCgkJaWYgKHBhdGhfbGVuID49IFVOSVhfUEFUSF9NQVgpCiNlbHNlCi8qIFdlIGNhbiBo b3BlIHRoYXQgdGhpcyBsaW1pdCB3aWxsIGV2ZW50dWFsbHkgdmFuaXNoLCBhdCBsZWFzdCBvbiBH TlUuCiAgIEhvd2V2ZXIsIGN1cnJlbnRseSwgd2hpbGUgZ2xpYmMgZG9lc24ndCBkZWZpbmUgYFVO SVhfUEFUSF9NQVgnLCBpdAogICBkb2N1bWVudHMgaXQgaGFzIGJlaW5nIGxpbWl0ZWQgdG8gMTA4 IGJ5dGVzLiAgKi8KCQlpZiAocGF0aF9sZW4gPj0gc2l6ZW9mIChjX3VuaXguc3VuX3BhdGgpKQoj ZW5kaWYKCQkgIHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUsICJ1bml4IGFkZHJlc3MgcGF0aCAi CgkJCQkgICJ0b28gbG9uZzogfkEiLCBzY21fbGlzdF8xIChwYXRoKSk7CgkJZWxzZQoJCSAgewoJ CSAgICBpZiAocGF0aF9sZW4pCgkJICAgICAgewoJCQlzY21fdG9fbG9jYWxlX3N0cmluZ2J1ZiAo cGF0aCwgY191bml4LnN1bl9wYXRoLAojaWZkZWYgVU5JWF9QQVRIX01BWAoJCQkJCQkgVU5JWF9Q QVRIX01BWCk7CiNlbHNlCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKGNfdW5p eC5zdW5fcGF0aCkpOwojZW5kaWYKCQkJY191bml4LnN1bl9wYXRoW3BhdGhfbGVuXSA9ICdcMCc7 CgoJCQkvKiBTYW5pdHkgY2hlY2suICAqLwoJCQlpZiAoc3RybGVuIChjX3VuaXguc3VuX3BhdGgp ICE9IHBhdGhfbGVuKQoJCQkgIHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUsICJ1bml4IGFkZHJl c3MgcGF0aCAiCgkJCQkJICAiY29udGFpbnMgbnVsIGNoYXJhY3RlcnM6IH5BIiwKCQkJCQkgIHNj bV9saXN0XzEgKHBhdGgpKTsKCQkgICAgICB9CgkJICAgIGVsc2UKCQkgICAgICBjX3VuaXguc3Vu X3BhdGhbMF0gPSAnXDAnOwoKCQkgICAgY191bml4LnN1bl9mYW1pbHkgPSBBRl9VTklYOwoKCQkg ICAgKmFkZHJlc3Nfc2l6ZSA9IFNVTl9MRU4gKCZjX3VuaXgpOwoJCSAgICBjX2FkZHJlc3MgPSBz Y21fbWFsbG9jIChzaXplb2YgKGNfdW5peCkpOwoJCSAgICBtZW1jcHkgKGNfYWRkcmVzcywgJmNf dW5peCwgc2l6ZW9mIChjX3VuaXgpKTsKCQkgIH0KCSAgICAgIH0KCSAgfQoKCWJyZWFrOwogICAg ICB9CiNlbmRpZgoKICAgIGRlZmF1bHQ6CiAgICAgIHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUs ICJ1bnJlY29nbmlzZWQgYWRkcmVzcyBmYW1pbHk6IH5BIiwKCQkgICAgICBzY21fbGlzdF8xIChz Y21fZnJvbV91c2hvcnQgKGZhbWlseSkpKTsKICAgIH0KCiAgcmV0dXJuIGNfYWRkcmVzczsKfQoj dW5kZWYgRlVOQ19OQU1FCgoKLyogUmV0dXJuIGEgbmV3bHktYWxsb2NhdGVkIGBzb2NrYWRkcicg c3RydWN0dXJlIHRoYXQgcmVmbGVjdHMgQUREUkVTUywgYmVpbmcKICAgYW4gYWRkcmVzcyBvZiBm YW1pbHkgRkFNSUxZLCB3aXRoIHRoZSBmYW1pbHktc3BlY2lmaWMgcGFyYW1ldGVycyBBUkdTIChz ZWUKICAgdGhlIGRlc2NyaXB0aW9uIG9mIGBjb25uZWN0JyBmb3IgZGV0YWlscykuICBUaGUgcmV0 dXJuZWQgc3RydWN0dXJlIG1heSBiZQogICBmcmVlZCB1c2luZyBgZnJlZSAoKScuICAqLwpzdHJ1 Y3Qgc29ja2FkZHIgKgpzY21fY19tYWtlX3NvY2tldF9hZGRyZXNzIChTQ00gZmFtaWx5LCBTQ00g YWRkcmVzcywgU0NNIGFyZ3MsCgkJCSAgIHNpemVfdCAqYWRkcmVzc19zaXplKQp7CiAgc3RydWN0 IHNvY2thZGRyICpzb2thOwoKICBzb2thID0gc2NtX2ZpbGxfc29ja2FkZHIgKHNjbV90b191c2hv cnQgKGZhbWlseSksIGFkZHJlc3MsICZhcmdzLCAxLAoJCQkgICAgInNjbV9jX21ha2Vfc29ja2V0 X2FkZHJlc3MiLCBhZGRyZXNzX3NpemUpOwoKICByZXR1cm4gc29rYTsKfQoKU0NNX0RFRklORSAo c2NtX21ha2Vfc29ja2V0X2FkZHJlc3MsICJtYWtlLXNvY2tldC1hZGRyZXNzIiwgMiwgMCwgMSwK CSAgICAoU0NNIGZhbWlseSwgU0NNIGFkZHJlc3MsIFNDTSBhcmdzKSwKCSAgICAiUmV0dXJuIGEg U2NoZW1lIGFkZHJlc3Mgb2JqZWN0IHRoYXQgcmVmbGVjdHMgQHZhcnthZGRyZXNzfSwgIgoJICAg ICJiZWluZyBhbiBhZGRyZXNzIG9mIGZhbWlseSBAdmFye2ZhbWlseX0sIHdpdGggdGhlICIKCSAg ICAiZmFtaWx5LXNwZWNpZmljIHBhcmFtZXRlcnMgQHZhcnthcmdzfSAoc2VlIHRoZSBkZXNjcmlw dGlvbiBvZiAiCgkgICAgIkBjb2Rle2Nvbm5lY3R9IGZvciBkZXRhaWxzKS4iKQojZGVmaW5lIEZV TkNfTkFNRSBzX3NjbV9tYWtlX3NvY2tldF9hZGRyZXNzCnsKICBTQ00gcmVzdWx0ID0gU0NNX0JP T0xfRjsKICBzdHJ1Y3Qgc29ja2FkZHIgKmNfYWRkcmVzczsKICBzaXplX3QgY19hZGRyZXNzX3Np emU7CgogIGNfYWRkcmVzcyA9IHNjbV9jX21ha2Vfc29ja2V0X2FkZHJlc3MgKGZhbWlseSwgYWRk cmVzcywgYXJncywKCQkJCQkgJmNfYWRkcmVzc19zaXplKTsKICBpZiAoY19hZGRyZXNzICE9IE5V TEwpCiAgICB7CiAgICAgIHJlc3VsdCA9IHNjbV9mcm9tX3NvY2thZGRyIChjX2FkZHJlc3MsIGNf YWRkcmVzc19zaXplKTsKICAgICAgZnJlZSAoY19hZGRyZXNzKTsKICAgIH0KCiAgcmV0dXJuIHJl c3VsdDsKfQojdW5kZWYgRlVOQ19OQU1FCgoMClNDTV9ERUZJTkUgKHNjbV9hY2NlcHQsICJhY2Nl cHQiLCAxLCAwLCAwLCAKICAgICAgICAgICAgKFNDTSBzb2NrKSwKCSAgICAiQWNjZXB0IGEgY29u bmVjdGlvbiBvbiBhIGJvdW5kLCBsaXN0ZW5pbmcgc29ja2V0LlxuIgoJICAgICJJZiB0aGVyZVxu IgoJICAgICJhcmUgbm8gcGVuZGluZyBjb25uZWN0aW9ucyBpbiB0aGUgcXVldWUsIHdhaXQgdW50 aWxcbiIKCSAgICAib25lIGlzIGF2YWlsYWJsZSB1bmxlc3MgdGhlIG5vbi1ibG9ja2luZyBvcHRp b24gaGFzIGJlZW5cbiIKCSAgICAic2V0IG9uIHRoZSBzb2NrZXQuXG5cbiIKCSAgICAiVGhlIHJl dHVybiB2YWx1ZSBpcyBhXG4iCgkgICAgInBhaXIgaW4gd2hpY2ggdGhlIEBlbXBoe2Nhcn0gaXMg YSBuZXcgc29ja2V0IHBvcnQgZm9yIHRoZVxuIgoJICAgICJjb25uZWN0aW9uIGFuZFxuIgoJICAg ICJ0aGUgQGVtcGh7Y2RyfSBpcyBhbiBvYmplY3Qgd2l0aCBhZGRyZXNzIGluZm9ybWF0aW9uIGFi b3V0IHRoZVxuIgoJICAgICJjbGllbnQgd2hpY2ggaW5pdGlhdGVkIHRoZSBjb25uZWN0aW9uLlxu XG4iCgkgICAgIkB2YXJ7c29ja30gZG9lcyBub3QgYmVjb21lIHBhcnQgb2YgdGhlXG4iCgkgICAg ImNvbm5lY3Rpb24gYW5kIHdpbGwgY29udGludWUgdG8gYWNjZXB0IG5ldyByZXF1ZXN0cy4iKQoj ZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9hY2NlcHQKewogIGludCBmZDsKICBpbnQgbmV3ZmQ7CiAg U0NNIGFkZHJlc3M7CiAgU0NNIG5ld3NvY2s7CiAgc29ja2xlbl90IGFkZHJfc2l6ZSA9IE1BWF9B RERSX1NJWkU7CiAgc2NtX3RfbWF4X3NvY2thZGRyIGFkZHI7CgogIHNvY2sgPSBTQ01fQ09FUkNF X09VVFBPUlQgKHNvY2spOwogIFNDTV9WQUxJREFURV9PUEZQT1JUICgxLCBzb2NrKTsKICBmZCA9 IFNDTV9GUE9SVF9GREVTIChzb2NrKTsKICBuZXdmZCA9IGFjY2VwdCAoZmQsIChzdHJ1Y3Qgc29j a2FkZHIgKikgJmFkZHIsICZhZGRyX3NpemUpOwogIGlmIChuZXdmZCA9PSAtMSkKICAgIFNDTV9T WVNFUlJPUjsKICBuZXdzb2NrID0gU0NNX1NPQ0tfRkRfVE9fUE9SVCAobmV3ZmQpOwogIGFkZHJl c3MgPSBfc2NtX2Zyb21fc29ja2FkZHIgKCZhZGRyLCBhZGRyX3NpemUsCgkJCQlGVU5DX05BTUUp OwoKICByZXR1cm4gc2NtX2NvbnMgKG5ld3NvY2ssIGFkZHJlc3MpOwp9CiN1bmRlZiBGVU5DX05B TUUKClNDTV9ERUZJTkUgKHNjbV9nZXRzb2NrbmFtZSwgImdldHNvY2tuYW1lIiwgMSwgMCwgMCwg CiAgICAgICAgICAgIChTQ00gc29jayksCgkgICAgIlJldHVybiB0aGUgYWRkcmVzcyBvZiBAdmFy e3NvY2t9LCBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZVxuIgoJICAgICJvYmplY3QgcmV0dXJuZWQg YnkgQGNvZGV7YWNjZXB0fS4gIE9uIG1hbnkgc3lzdGVtcyB0aGUgYWRkcmVzc1xuIgoJICAgICJv ZiBhIHNvY2tldCBpbiB0aGUgQGNvZGV7QUZfRklMRX0gbmFtZXNwYWNlIGNhbm5vdCBiZSByZWFk LiIpCiNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX2dldHNvY2tuYW1lCnsKICBpbnQgZmQ7CiAgc29j a2xlbl90IGFkZHJfc2l6ZSA9IE1BWF9BRERSX1NJWkU7CiAgc2NtX3RfbWF4X3NvY2thZGRyIGFk ZHI7CgogIHNvY2sgPSBTQ01fQ09FUkNFX09VVFBPUlQgKHNvY2spOwogIFNDTV9WQUxJREFURV9P UEZQT1JUICgxLCBzb2NrKTsKICBmZCA9IFNDTV9GUE9SVF9GREVTIChzb2NrKTsKICBpZiAoZ2V0 c29ja25hbWUgKGZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmYWRkcl9zaXplKSA9PSAt MSkKICAgIFNDTV9TWVNFUlJPUjsKCiAgcmV0dXJuIF9zY21fZnJvbV9zb2NrYWRkciAoJmFkZHIs IGFkZHJfc2l6ZSwgRlVOQ19OQU1FKTsKfQojdW5kZWYgRlVOQ19OQU1FCgpTQ01fREVGSU5FIChz Y21fZ2V0cGVlcm5hbWUsICJnZXRwZWVybmFtZSIsIDEsIDAsIDAsIAogICAgICAgICAgICAoU0NN IHNvY2spLAoJICAgICJSZXR1cm4gdGhlIGFkZHJlc3MgdGhhdCBAdmFye3NvY2t9XG4iCgkgICAg ImlzIGNvbm5lY3RlZCB0bywgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGUgb2JqZWN0IHJldHVybmVk IGJ5XG4iCgkgICAgIkBjb2Rle2FjY2VwdH0uICBPbiBtYW55IHN5c3RlbXMgdGhlIGFkZHJlc3Mg b2YgYSBzb2NrZXQgaW4gdGhlXG4iCgkgICAgIkBjb2Rle0FGX0ZJTEV9IG5hbWVzcGFjZSBjYW5u b3QgYmUgcmVhZC4iKQojZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9nZXRwZWVybmFtZQp7CiAgaW50 IGZkOwogIHNvY2tsZW5fdCBhZGRyX3NpemUgPSBNQVhfQUREUl9TSVpFOwogIHNjbV90X21heF9z b2NrYWRkciBhZGRyOwoKICBzb2NrID0gU0NNX0NPRVJDRV9PVVRQT1JUIChzb2NrKTsKICBTQ01f VkFMSURBVEVfT1BGUE9SVCAoMSwgc29jayk7CiAgZmQgPSBTQ01fRlBPUlRfRkRFUyAoc29jayk7 CiAgaWYgKGdldHBlZXJuYW1lIChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmFkZHJf c2l6ZSkgPT0gLTEpCiAgICBTQ01fU1lTRVJST1I7CgogIHJldHVybiBfc2NtX2Zyb21fc29ja2Fk ZHIgKCZhZGRyLCBhZGRyX3NpemUsIEZVTkNfTkFNRSk7Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NN X0RFRklORSAoc2NtX3JlY3YsICJyZWN2ISIsIDIsIDEsIDAsCiAgICAgICAgICAgIChTQ00gc29j aywgU0NNIGJ1ZiwgU0NNIGZsYWdzKSwKCSAgICAiUmVjZWl2ZSBkYXRhIGZyb20gYSBzb2NrZXQg cG9ydC5cbiIKCSAgICAiQHZhcntzb2NrfSBtdXN0IGFscmVhZHlcbiIKCSAgICAiYmUgYm91bmQg dG8gdGhlIGFkZHJlc3MgZnJvbSB3aGljaCBkYXRhIGlzIHRvIGJlIHJlY2VpdmVkLlxuIgoJICAg ICJAdmFye2J1Zn0gaXMgYSBieXRldmVjdG9yIGludG8gd2hpY2hcbiIKCSAgICAidGhlIGRhdGEg d2lsbCBiZSB3cml0dGVuLiAgVGhlIHNpemUgb2YgQHZhcntidWZ9IGxpbWl0c1xuIgoJICAgICJ0 aGUgYW1vdW50IG9mXG4iCgkgICAgImRhdGEgd2hpY2ggY2FuIGJlIHJlY2VpdmVkOiBpbiB0aGUg Y2FzZSBvZiBwYWNrZXRcbiIKCSAgICAicHJvdG9jb2xzLCBpZiBhIHBhY2tldCBsYXJnZXIgdGhh biB0aGlzIGxpbWl0IGlzIGVuY291bnRlcmVkXG4iCgkgICAgInRoZW4gc29tZSBkYXRhXG4iCgkg ICAgIndpbGwgYmUgaXJyZXZvY2FibHkgbG9zdC5cblxuIgoJICAgICJUaGUgb3B0aW9uYWwgQHZh cntmbGFnc30gYXJndW1lbnQgaXMgYSB2YWx1ZSBvclxuIgoJICAgICJiaXR3aXNlIE9SIG9mIE1T R19PT0IsIE1TR19QRUVLLCBNU0dfRE9OVFJPVVRFIGV0Yy5cblxuIgoJICAgICJUaGUgdmFsdWUg cmV0dXJuZWQgaXMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gdGhlXG4iCgkgICAgInNv Y2tldC5cblxuIgoJICAgICJOb3RlIHRoYXQgdGhlIGRhdGEgaXMgcmVhZCBkaXJlY3RseSBmcm9t IHRoZSBzb2NrZXQgZmlsZVxuIgoJICAgICJkZXNjcmlwdG9yOlxuIgoJICAgICJhbnkgdW5yZWFk IGJ1ZmZlcmVkIHBvcnQgZGF0YSBpcyBpZ25vcmVkLiIpCiNkZWZpbmUgRlVOQ19OQU1FIHNfc2Nt X3JlY3YKewogIGludCBydiwgZmQsIGZsZzsKCiAgU0NNX1ZBTElEQVRFX09QRlBPUlQgKDEsIHNv Y2spOwoKICBpZiAoU0NNX1VOQk5EUCAoZmxhZ3MpKQogICAgZmxnID0gMDsKICBlbHNlCiAgICBm bGcgPSBzY21fdG9faW50IChmbGFncyk7CiAgZmQgPSBTQ01fRlBPUlRfRkRFUyAoc29jayk7Cgoj aWYgU0NNX0VOQUJMRV9ERVBSRUNBVEVEID09IDEKICBpZiAoU0NNX1VOTElLRUxZIChzY21faXNf c3RyaW5nIChidWYpKSkKICAgIHsKICAgICAgU0NNIG1zZzsKICAgICAgY2hhciAqZGVzdDsKICAg ICAgc2l6ZV90IGxlbjsKCiAgICAgIHNjbV9jX2lzc3VlX2RlcHJlY2F0aW9uX3dhcm5pbmcKCSgi UGFzc2luZyBhIHN0cmluZyB0byBgcmVjdiEnIGlzIGRlcHJlY2F0ZWQsICIKCSAidXNlIGEgYnl0 ZXZlY3RvciBpbnN0ZWFkLiIpOwoKICAgICAgbGVuID0gc2NtX2lfc3RyaW5nX2xlbmd0aCAoYnVm KTsKICAgICAgbXNnID0gc2NtX2lfbWFrZV9zdHJpbmcgKGxlbiwgJmRlc3QsIDApOwogICAgICBT Q01fU1lTQ0FMTCAocnYgPSByZWN2IChmZCwgZGVzdCwgbGVuLCBmbGcpKTsKICAgICAgc2NtX3N0 cmluZ19jb3B5X3ggKGJ1Ziwgc2NtX2Zyb21faW50ICgwKSwKCQkJIG1zZywgc2NtX2Zyb21faW50 ICgwKSwgc2NtX2Zyb21fc2l6ZV90IChsZW4pKTsKICAgIH0KICBlbHNlCiNlbmRpZgogICAgewog ICAgICBTQ01fVkFMSURBVEVfQllURVZFQ1RPUiAoMSwgYnVmKTsKCiAgICAgIFNDTV9TWVNDQUxM IChydiA9IHJlY3YgKGZkLAoJCQkgICAgICBTQ01fQllURVZFQ1RPUl9DT05URU5UUyAoYnVmKSwK CQkJICAgICAgU0NNX0JZVEVWRUNUT1JfTEVOR1RIIChidWYpLAoJCQkgICAgICBmbGcpKTsKICAg IH0KCiAgaWYgKFNDTV9VTkxJS0VMWSAocnYgPT0gLTEpKQogICAgU0NNX1NZU0VSUk9SOwoKICBz Y21fcmVtZW1iZXJfdXB0b19oZXJlIChidWYpOwogIHJldHVybiBzY21fZnJvbV9pbnQgKHJ2KTsK fQojdW5kZWYgRlVOQ19OQU1FCgpTQ01fREVGSU5FIChzY21fc2VuZCwgInNlbmQiLCAyLCAxLCAw LAogICAgICAgICAgICAoU0NNIHNvY2ssIFNDTSBtZXNzYWdlLCBTQ00gZmxhZ3MpLAoJICAgICJU cmFuc21pdCBieXRldmVjdG9yIEB2YXJ7bWVzc2FnZX0gb24gc29ja2V0IHBvcnQgQHZhcntzb2Nr fS5cbiIKCSAgICAiQHZhcntzb2NrfSBtdXN0IGFscmVhZHkgYmUgYm91bmQgdG8gYSBkZXN0aW5h dGlvbiBhZGRyZXNzLiAgVGhlXG4iCgkgICAgInZhbHVlIHJldHVybmVkIGlzIHRoZSBudW1iZXIg b2YgYnl0ZXMgdHJhbnNtaXR0ZWQgLS1cbiIKCSAgICAiaXQncyBwb3NzaWJsZSBmb3JcbiIKCSAg ICAidGhpcyB0byBiZSBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiBAdmFye21lc3NhZ2V9XG4iCgkg ICAgImlmIHRoZSBzb2NrZXQgaXNcbiIKCSAgICAic2V0IHRvIGJlIG5vbi1ibG9ja2luZy4gIFRo ZSBvcHRpb25hbCBAdmFye2ZsYWdzfSBhcmd1bWVudFxuIgoJICAgICJpcyBhIHZhbHVlIG9yXG4i CgkgICAgImJpdHdpc2UgT1Igb2YgTVNHX09PQiwgTVNHX1BFRUssIE1TR19ET05UUk9VVEUgZXRj LlxuXG4iCgkgICAgIk5vdGUgdGhhdCB0aGUgZGF0YSBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHRo ZSBzb2NrZXRcbiIKCSAgICAiZmlsZSBkZXNjcmlwdG9yOlxuIgoJICAgICJhbnkgdW5mbHVzaGVk IGJ1ZmZlcmVkIHBvcnQgZGF0YSBpcyBpZ25vcmVkLlxuXG4iCgkgICAgIlRoaXMgb3BlcmF0aW9u IGlzIGRlZmluZWQgb25seSBmb3Igc3RyaW5ncyBjb250YWluaW5nIGNvZGVwb2ludHNcbiIKCSAg ICAiemVybyB0byAyNTUuIikKI2RlZmluZSBGVU5DX05BTUUgc19zY21fc2VuZAp7CiAgaW50IHJ2 LCBmZCwgZmxnOwoKICBzb2NrID0gU0NNX0NPRVJDRV9PVVRQT1JUIChzb2NrKTsKICBTQ01fVkFM SURBVEVfT1BGUE9SVCAoMSwgc29jayk7CgogIGlmIChTQ01fVU5CTkRQIChmbGFncykpCiAgICBm bGcgPSAwOwogIGVsc2UKICAgIGZsZyA9IHNjbV90b19pbnQgKGZsYWdzKTsKCiAgZmQgPSBTQ01f RlBPUlRfRkRFUyAoc29jayk7CgojaWYgU0NNX0VOQUJMRV9ERVBSRUNBVEVEID09IDEKICBpZiAo U0NNX1VOTElLRUxZIChzY21faXNfc3RyaW5nIChtZXNzYWdlKSkpCiAgICB7CiAgICAgIHNjbV9j X2lzc3VlX2RlcHJlY2F0aW9uX3dhcm5pbmcKCSgiUGFzc2luZyBhIHN0cmluZyB0byBgc2VuZCcg aXMgZGVwcmVjYXRlZCwgIgoJICJ1c2UgYSBieXRldmVjdG9yIGluc3RlYWQuIik7CgogICAgICAv KiBJZiB0aGUgc3RyaW5nIGlzIHdpZGUsIHNlZSBpZiBpdCBjYW4gYmUgY29lcmNlZCBpbnRvIGEg bmFycm93Cgkgc3RyaW5nLiAgKi8KICAgICAgaWYgKCFzY21faV9pc19uYXJyb3dfc3RyaW5nICht ZXNzYWdlKQoJICB8fCAhc2NtX2lfdHJ5X25hcnJvd19zdHJpbmcgKG1lc3NhZ2UpKQoJU0NNX01J U0NfRVJST1IgKCJ0aGUgbWVzc2FnZSBzdHJpbmcgaXMgbm90IDgtYml0OiB+cyIsCiAgICAgICAg ICAgICAgICAgICAgICAgIHNjbV9saXN0XzEgKG1lc3NhZ2UpKTsKCiAgICAgIFNDTV9TWVNDQUxM IChydiA9IHNlbmQgKGZkLAoJCQkgICAgICBzY21faV9zdHJpbmdfY2hhcnMgKG1lc3NhZ2UpLAoJ CQkgICAgICBzY21faV9zdHJpbmdfbGVuZ3RoIChtZXNzYWdlKSwKCQkJICAgICAgZmxnKSk7CiAg ICB9CiAgZWxzZQojZW5kaWYKICAgIHsKICAgICAgU0NNX1ZBTElEQVRFX0JZVEVWRUNUT1IgKDEs IG1lc3NhZ2UpOwoKICAgICAgU0NNX1NZU0NBTEwgKHJ2ID0gc2VuZCAoZmQsCgkJCSAgICAgIFND TV9CWVRFVkVDVE9SX0NPTlRFTlRTIChtZXNzYWdlKSwKCQkJICAgICAgU0NNX0JZVEVWRUNUT1Jf TEVOR1RIIChtZXNzYWdlKSwKCQkJICAgICAgZmxnKSk7CiAgICB9CgogIGlmIChydiA9PSAtMSkK ICAgIFNDTV9TWVNFUlJPUjsKCiAgc2NtX3JlbWVtYmVyX3VwdG9faGVyZV8xIChtZXNzYWdlKTsK ICByZXR1cm4gc2NtX2Zyb21faW50IChydik7Cn0KI3VuZGVmIEZVTkNfTkFNRQoKU0NNX0RFRklO RSAoc2NtX3JlY3Zmcm9tLCAicmVjdmZyb20hIiwgMiwgMywgMCwKICAgICAgICAgICAgKFNDTSBz b2NrLCBTQ00gYnVmLCBTQ00gZmxhZ3MsIFNDTSBzdGFydCwgU0NNIGVuZCksCgkgICAgIlJlY2Vp dmUgZGF0YSBmcm9tIHNvY2tldCBwb3J0IEB2YXJ7c29ja30gKHdoaWNoIG11c3QgYmUgYWxyZWFk eVxuIgoJICAgICJib3VuZCksIHJldHVybmluZyB0aGUgb3JpZ2luYXRpbmcgYWRkcmVzcyBhcyB3 ZWxsIGFzIHRoZSBkYXRhLlxuIgoJICAgICJUaGlzIGlzIHVzdWFsbHkgZm9yIHVzZSBvbiBkYXRh Z3JhbSBzb2NrZXRzLCBidXQgY2FuIGJlIHVzZWQgb25cbiIKCSAgICAic3RyZWFtLW9yaWVudGVk IHNvY2tldHMgdG9vLlxuIgoJICAgICJcbiIKCSAgICAiVGhlIGRhdGEgcmVjZWl2ZWQgaXMgc3Rv cmVkIGluIGJ5dGV2ZWN0b3IgQHZhcntidWZ9LCB1c2luZ1xuIgoJICAgICJlaXRoZXIgdGhlIHdo b2xlIGJ5dGV2ZWN0b3Igb3IganVzdCB0aGUgcmVnaW9uIGJldHdlZW4gdGhlIG9wdGlvbmFsXG4i CgkgICAgIkB2YXJ7c3RhcnR9IGFuZCBAdmFye2VuZH0gcG9zaXRpb25zLiAgVGhlIHNpemUgb2Yg QHZhcntidWZ9XG4iCgkgICAgImxpbWl0cyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBjYW4gYmUg cmVjZWl2ZWQuICBGb3IgZGF0YWdyYW1cbiIKCSAgICAicHJvdG9jb2xzLCBpZiBhIHBhY2tldCBs YXJnZXIgdGhhbiB0aGlzIGlzIHJlY2VpdmVkIHRoZW4gZXhjZXNzXG4iCgkgICAgImJ5dGVzIGFy ZSBpcnJldm9jYWJseSBsb3N0LlxuIgoJICAgICJcbiIKCSAgICAiVGhlIHJldHVybiB2YWx1ZSBp cyBhIHBhaXIuICBUaGUgQGNvZGV7Y2FyfSBpcyB0aGUgbnVtYmVyIG9mXG4iCgkgICAgImJ5dGVz IHJlYWQuICBUaGUgQGNvZGV7Y2RyfSBpcyBhIHNvY2tldCBhZGRyZXNzIG9iamVjdCB3aGljaCBp c1xuIgoJICAgICJ3aGVyZSB0aGUgZGF0YSBjYW1lIGZyb20sIG9yIEBjb2RleyNmfSBpZiB0aGUg b3JpZ2luIGlzXG4iCgkgICAgInVua25vd24uXG4iCgkgICAgIlxuIgoJICAgICJUaGUgb3B0aW9u YWwgQHZhcntmbGFnc30gYXJndW1lbnQgaXMgYSBvciBiaXR3aXNlIE9SXG4iCgkgICAgIihAY29k ZXtsb2dpb3J9KSBvZiBAY29kZXtNU0dfT09CfSwgQGNvZGV7TVNHX1BFRUt9LFxuIgoJICAgICJA Y29kZXtNU0dfRE9OVFJPVVRFfSBldGMuXG4iCgkgICAgIlxuIgoJICAgICJEYXRhIGlzIHJlYWQg ZGlyZWN0bHkgZnJvbSB0aGUgc29ja2V0IGZpbGUgZGVzY3JpcHRvciwgYW55XG4iCgkgICAgImJ1 ZmZlcmVkIHBvcnQgZGF0YSBpcyBpZ25vcmVkLlxuIgoJICAgICJcbiIKCSAgICAiT24gYSBHTlUv TGludXggc3lzdGVtIEBjb2Rle3JlY3Zmcm9tIX0gaXMgbm90IG11bHRpLXRocmVhZGluZyxcbiIK CSAgICAiYWxsIHRocmVhZHMgc3RvcCB3aGlsZSBhIEBjb2Rle3JlY3Zmcm9tIX0gY2FsbCBpcyBp biBwcm9ncmVzcy5cbiIKCSAgICAiQW4gYXBwbGljYXRpb24gbWF5IG5lZWQgdG8gdXNlIEBjb2Rl e3NlbGVjdH0sIEBjb2Rle09fTk9OQkxPQ0t9XG4iCgkgICAgIm9yIEBjb2Rle01TR19ET05UV0FJ VH0gdG8gYXZvaWQgdGhpcy4iKQojZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9yZWN2ZnJvbQp7CiAg aW50IHJ2LCBmZCwgZmxnOwogIFNDTSBhZGRyZXNzOwogIHNpemVfdCBvZmZzZXQsIGNlbmQ7CiAg c29ja2xlbl90IGFkZHJfc2l6ZSA9IE1BWF9BRERSX1NJWkU7CiAgc2NtX3RfbWF4X3NvY2thZGRy IGFkZHI7CgogIFNDTV9WQUxJREFURV9PUEZQT1JUICgxLCBzb2NrKTsKICBmZCA9IFNDTV9GUE9S VF9GREVTIChzb2NrKTsKCiAgaWYgKFNDTV9VTkJORFAgKGZsYWdzKSkKICAgIGZsZyA9IDA7CiAg ZWxzZQogICAgU0NNX1ZBTElEQVRFX1VMT05HX0NPUFkgKDMsIGZsYWdzLCBmbGcpOwoKICAoKHN0 cnVjdCBzb2NrYWRkciAqKSAmYWRkciktPnNhX2ZhbWlseSA9IEFGX1VOU1BFQzsKCiNpZiBTQ01f RU5BQkxFX0RFUFJFQ0FURUQgPT0gMQogIGlmIChTQ01fVU5MSUtFTFkgKHNjbV9pc19zdHJpbmcg KGJ1ZikpKQogICAgewogICAgICBjaGFyICpjYnVmOwoKICAgICAgc2NtX2NfaXNzdWVfZGVwcmVj YXRpb25fd2FybmluZwoJKCJQYXNzaW5nIGEgc3RyaW5nIHRvIGByZWN2ZnJvbSEnIGlzIGRlcHJl Y2F0ZWQsICIKCSAidXNlIGEgYnl0ZXZlY3RvciBpbnN0ZWFkLiIpOwoKICAgICAgc2NtX2lfZ2V0 X3N1YnN0cmluZ19zcGVjIChzY21faV9zdHJpbmdfbGVuZ3RoIChidWYpLAoJCQkJc3RhcnQsICZv ZmZzZXQsIGVuZCwgJmNlbmQpOwoKICAgICAgYnVmID0gc2NtX2lfc3RyaW5nX3N0YXJ0X3dyaXRp bmcgKGJ1Zik7CiAgICAgIGNidWYgPSBzY21faV9zdHJpbmdfd3JpdGFibGVfY2hhcnMgKGJ1Zik7 CgogICAgICBTQ01fU1lTQ0FMTCAocnYgPSByZWN2ZnJvbSAoZmQsIGNidWYgKyBvZmZzZXQsCgkJ CQkgIGNlbmQgLSBvZmZzZXQsIGZsZywKCQkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwg JmFkZHJfc2l6ZSkpOwogICAgICBzY21faV9zdHJpbmdfc3RvcF93cml0aW5nICgpOwogICAgfQog IGVsc2UKI2VuZGlmCiAgICB7CiAgICAgIFNDTV9WQUxJREFURV9CWVRFVkVDVE9SICgxLCBidWYp OwoKICAgICAgaWYgKFNDTV9VTkJORFAgKHN0YXJ0KSkKCW9mZnNldCA9IDA7CiAgICAgIGVsc2UK CW9mZnNldCA9IHNjbV90b19zaXplX3QgKHN0YXJ0KTsKCiAgICAgIGlmIChTQ01fVU5CTkRQIChl bmQpKQoJY2VuZCA9IFNDTV9CWVRFVkVDVE9SX0xFTkdUSCAoYnVmKTsKICAgICAgZWxzZQoJewoJ ICBjZW5kID0gc2NtX3RvX3NpemVfdCAoZW5kKTsKCSAgaWYgKFNDTV9VTkxJS0VMWSAoY2VuZCA+ PSBTQ01fQllURVZFQ1RPUl9MRU5HVEggKGJ1ZikKCQkJICAgIHx8IGNlbmQgPCBvZmZzZXQpKQoJ ICAgIHNjbV9vdXRfb2ZfcmFuZ2UgKEZVTkNfTkFNRSwgZW5kKTsKCX0KCiAgICAgIFNDTV9TWVND QUxMIChydiA9IHJlY3Zmcm9tIChmZCwKCQkJCSAgU0NNX0JZVEVWRUNUT1JfQ09OVEVOVFMgKGJ1 ZikgKyBvZmZzZXQsCgkJCQkgIGNlbmQgLSBvZmZzZXQsIGZsZywKCQkJCSAgKHN0cnVjdCBzb2Nr YWRkciAqKSAmYWRkciwgJmFkZHJfc2l6ZSkpOwogICAgfQoKICBpZiAocnYgPT0gLTEpCiAgICBT Q01fU1lTRVJST1I7CgogIC8qIGByZWN2ZnJvbScgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmV0dXJu IGFuIGFkZHJlc3MuICBVc3VhbGx5IG5vdGhpbmcKICAgICBpcyByZXR1cm5lZCBmb3Igc3RyZWFt IHNvY2tldHMuICAqLwogIGlmICgoKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciktPnNhX2ZhbWls eSAhPSBBRl9VTlNQRUMpCiAgICBhZGRyZXNzID0gX3NjbV9mcm9tX3NvY2thZGRyICgmYWRkciwg YWRkcl9zaXplLCBGVU5DX05BTUUpOwogIGVsc2UKICAgIGFkZHJlc3MgPSBTQ01fQk9PTF9GOwoK ICBzY21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKGJ1Zik7CgogIHJldHVybiBzY21fY29ucyAoc2Nt X2Zyb21faW50IChydiksIGFkZHJlc3MpOwp9CiN1bmRlZiBGVU5DX05BTUUKClNDTV9ERUZJTkUg KHNjbV9zZW5kdG8sICJzZW5kdG8iLCAzLCAxLCAxLAogICAgICAgICAgICAoU0NNIHNvY2ssIFND TSBtZXNzYWdlLCBTQ00gZmFtX29yX3NvY2thZGRyLCBTQ00gYWRkcmVzcywgU0NNIGFyZ3NfYW5k X2ZsYWdzKSwKCSAgICAiVHJhbnNtaXQgYnl0ZXZlY3RvciBAdmFye21lc3NhZ2V9IG9uIHNvY2tl dCBwb3J0XG4iCgkgICAgIkB2YXJ7c29ja30uICBUaGVcbiIKCSAgICAiZGVzdGluYXRpb24gYWRk cmVzcyBpcyBzcGVjaWZpZWQgdXNpbmcgdGhlIEB2YXJ7ZmFtfSxcbiIKCSAgICAiQHZhcnthZGRy ZXNzfSBhbmRcbiIKCSAgICAiQHZhcnthcmdzX2FuZF9mbGFnc30gYXJndW1lbnRzLCBvciBqdXN0 IGEgc29ja2V0IGFkZHJlc3Mgb2JqZWN0ICIKCSAgICAicmV0dXJuZWQgYnkgQGNvZGV7bWFrZS1z b2NrZXQtYWRkcmVzc30sIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlXG4iCgkgICAgIkBjb2Rle2Nv bm5lY3R9IHByb2NlZHVyZS4gIEB2YXJ7YXJnc19hbmRfZmxhZ3N9IGNvbnRhaW5zXG4iCgkgICAg InRoZSB1c3VhbCBjb25uZWN0aW9uIGFyZ3VtZW50cyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5XG4i CgkgICAgImEgZmxhZ3MgYXJndW1lbnQsIHdoaWNoIGlzIGEgdmFsdWUgb3JcbiIKCSAgICAiYml0 d2lzZSBPUiBvZiBNU0dfT09CLCBNU0dfUEVFSywgTVNHX0RPTlRST1VURSBldGMuXG5cbiIKCSAg ICAiVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQg LS1cbiIKCSAgICAiaXQncyBwb3NzaWJsZSBmb3JcbiIKCSAgICAidGhpcyB0byBiZSBsZXNzIHRo YW4gdGhlIGxlbmd0aCBvZiBAdmFye21lc3NhZ2V9IGlmIHRoZVxuIgoJICAgICJzb2NrZXQgaXNc biIKCSAgICAic2V0IHRvIGJlIG5vbi1ibG9ja2luZy5cbiIKCSAgICAiTm90ZSB0aGF0IHRoZSBk YXRhIGlzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gdGhlIHNvY2tldFxuIgoJICAgICJmaWxlIGRlc2Ny aXB0b3I6XG4iCgkgICAgImFueSB1bmZsdXNoZWQgYnVmZmVyZWQgcG9ydCBkYXRhIGlzIGlnbm9y ZWQuXG4iCgkgICAgIlRoaXMgb3BlcmF0aW9uIGlzIGRlZmluZWQgb25seSBmb3Igc3RyaW5ncyBj b250YWluaW5nIGNvZGVwb2ludHNcbiIKCSAgICAiemVybyB0byAyNTUuIikKI2RlZmluZSBGVU5D X05BTUUgc19zY21fc2VuZHRvCnsKICBpbnQgcnYsIGZkLCBmbGc7CiAgc3RydWN0IHNvY2thZGRy ICpzb2thOwogIHNpemVfdCBzaXplOwoKICBzb2NrID0gU0NNX0NPRVJDRV9PVVRQT1JUIChzb2Nr KTsKICBTQ01fVkFMSURBVEVfRlBPUlQgKDEsIHNvY2spOwogIGZkID0gU0NNX0ZQT1JUX0ZERVMg KHNvY2spOwoKICBpZiAoIXNjbV9pc19udW1iZXIgKGZhbV9vcl9zb2NrYWRkcikpCiAgICB7CiAg ICAgIC8qIEZBTV9PUl9TT0NLQUREUiBtdXN0IGFjdHVhbGx5IGJlIGEgYHNvY2tldCBhZGRyZXNz JyBvYmplY3QuICBUaGlzCgkgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cywgaS5l LiBBRERSRVNTIGFuZCB0aG9zZSBsaXN0ZWQgaW4KCSBBUkdTX0FORF9GTEFHUywgYXJlIHRoZSBg TVNHXycgZmxhZ3MuICAqLwogICAgICBzb2thID0gc2NtX3RvX3NvY2thZGRyIChmYW1fb3Jfc29j a2FkZHIsICZzaXplKTsKICAgICAgaWYgKCFzY21faXNfZXEgKGFkZHJlc3MsIFNDTV9VTkRFRklO RUQpKQoJYXJnc19hbmRfZmxhZ3MgPSBzY21fY29ucyAoYWRkcmVzcywgYXJnc19hbmRfZmxhZ3Mp OwogICAgfQogIGVsc2UKICAgIHNva2EgPSBzY21fZmlsbF9zb2NrYWRkciAoc2NtX3RvX2ludCAo ZmFtX29yX3NvY2thZGRyKSwgYWRkcmVzcywKCQkJICAgICAgJmFyZ3NfYW5kX2ZsYWdzLCAzLCBG VU5DX05BTUUsICZzaXplKTsKCiAgaWYgKHNjbV9pc19udWxsIChhcmdzX2FuZF9mbGFncykpCiAg ICBmbGcgPSAwOwogIGVsc2UKICAgIHsKICAgICAgU0NNX1ZBTElEQVRFX0NPTlMgKDUsIGFyZ3Nf YW5kX2ZsYWdzKTsKICAgICAgZmxnID0gU0NNX05VTTJVTE9ORyAoNSwgU0NNX0NBUiAoYXJnc19h bmRfZmxhZ3MpKTsKICAgIH0KCiNpZiBTQ01fRU5BQkxFX0RFUFJFQ0FURUQgPT0gMQogIGlmIChT Q01fVU5MSUtFTFkgKHNjbV9pc19zdHJpbmcgKG1lc3NhZ2UpKSkKICAgIHsKICAgICAgc2NtX2Nf aXNzdWVfZGVwcmVjYXRpb25fd2FybmluZwoJKCJQYXNzaW5nIGEgc3RyaW5nIHRvIGBzZW5kdG8n IGlzIGRlcHJlY2F0ZWQsICIKCSAidXNlIGEgYnl0ZXZlY3RvciBpbnN0ZWFkLiIpOwoKICAgICAg LyogSWYgdGhlIHN0cmluZyBpcyB3aWRlLCBzZWUgaWYgaXQgY2FuIGJlIGNvZXJjZWQgaW50byBh IG5hcnJvdwoJIHN0cmluZy4gICovCiAgICAgIGlmICghc2NtX2lfaXNfbmFycm93X3N0cmluZyAo bWVzc2FnZSkKCSAgfHwgIXNjbV9pX3RyeV9uYXJyb3dfc3RyaW5nIChtZXNzYWdlKSkKCVNDTV9N SVNDX0VSUk9SICgidGhlIG1lc3NhZ2Ugc3RyaW5nIGlzIG5vdCA4LWJpdDogfnMiLAogICAgICAg ICAgICAgICAgICAgICAgICBzY21fbGlzdF8xIChtZXNzYWdlKSk7CgogICAgICBTQ01fU1lTQ0FM TCAocnYgPSBzZW5kdG8gKGZkLAoJCQkJc2NtX2lfc3RyaW5nX2NoYXJzIChtZXNzYWdlKSwKCQkJ CXNjbV9pX3N0cmluZ19sZW5ndGggKG1lc3NhZ2UpLAoJCQkJZmxnLCBzb2thLCBzaXplKSk7CiAg ICB9CiAgZWxzZQojZW5kaWYKICAgIHsKICAgICAgU0NNX1ZBTElEQVRFX0JZVEVWRUNUT1IgKDEs IG1lc3NhZ2UpOwoKICAgICAgU0NNX1NZU0NBTEwgKHJ2ID0gc2VuZHRvIChmZCwKCQkJCVNDTV9C WVRFVkVDVE9SX0NPTlRFTlRTIChtZXNzYWdlKSwKCQkJCVNDTV9CWVRFVkVDVE9SX0xFTkdUSCAo bWVzc2FnZSksCgkJCQlmbGcsIHNva2EsIHNpemUpKTsKICAgIH0KCiAgaWYgKHJ2ID09IC0xKQog ICAgewogICAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwogICAgICBmcmVlIChzb2thKTsKICAg ICAgZXJybm8gPSBzYXZlX2Vycm5vOwogICAgICBTQ01fU1lTRVJST1I7CiAgICB9CiAgZnJlZSAo c29rYSk7CgogIHNjbV9yZW1lbWJlcl91cHRvX2hlcmVfMSAobWVzc2FnZSk7CiAgcmV0dXJuIHNj bV9mcm9tX2ludCAocnYpOwp9CiN1bmRlZiBGVU5DX05BTUUKDAoKCnZvaWQKc2NtX2luaXRfc29j a2V0ICgpCnsKICAvKiBwcm90b2NvbCBmYW1pbGllcy4gICovCiNpZmRlZiBBRl9VTlNQRUMKICBz Y21fY19kZWZpbmUgKCJBRl9VTlNQRUMiLCBzY21fZnJvbV9pbnQgKEFGX1VOU1BFQykpOwojZW5k aWYKI2lmZGVmIEFGX1VOSVgKICBzY21fY19kZWZpbmUgKCJBRl9VTklYIiwgc2NtX2Zyb21faW50 IChBRl9VTklYKSk7CiNlbmRpZgojaWZkZWYgQUZfSU5FVAogIHNjbV9jX2RlZmluZSAoIkFGX0lO RVQiLCBzY21fZnJvbV9pbnQgKEFGX0lORVQpKTsKI2VuZGlmCiNpZmRlZiBBRl9JTkVUNgogIHNj bV9jX2RlZmluZSAoIkFGX0lORVQ2Iiwgc2NtX2Zyb21faW50IChBRl9JTkVUNikpOwojZW5kaWYK CiNpZmRlZiBQRl9VTlNQRUMKICBzY21fY19kZWZpbmUgKCJQRl9VTlNQRUMiLCBzY21fZnJvbV9p bnQgKFBGX1VOU1BFQykpOwojZW5kaWYKI2lmZGVmIFBGX1VOSVgKICBzY21fY19kZWZpbmUgKCJQ Rl9VTklYIiwgc2NtX2Zyb21faW50IChQRl9VTklYKSk7CiNlbmRpZgojaWZkZWYgUEZfSU5FVAog IHNjbV9jX2RlZmluZSAoIlBGX0lORVQiLCBzY21fZnJvbV9pbnQgKFBGX0lORVQpKTsKI2VuZGlm CiNpZmRlZiBQRl9JTkVUNgogIHNjbV9jX2RlZmluZSAoIlBGX0lORVQ2Iiwgc2NtX2Zyb21faW50 IChQRl9JTkVUNikpOwojZW5kaWYKCiAgLyogc3RhbmRhcmQgYWRkcmVzc2VzLiAgKi8KI2lmZGVm IElOQUREUl9BTlkKICBzY21fY19kZWZpbmUgKCJJTkFERFJfQU5ZIiwgc2NtX2Zyb21fdWxvbmcg KElOQUREUl9BTlkpKTsKI2VuZGlmCiNpZmRlZiBJTkFERFJfQlJPQURDQVNUCiAgc2NtX2NfZGVm aW5lICgiSU5BRERSX0JST0FEQ0FTVCIsIHNjbV9mcm9tX3Vsb25nIChJTkFERFJfQlJPQURDQVNU KSk7CiNlbmRpZgojaWZkZWYgSU5BRERSX05PTkUKICBzY21fY19kZWZpbmUgKCJJTkFERFJfTk9O RSIsIHNjbV9mcm9tX3Vsb25nIChJTkFERFJfTk9ORSkpOwojZW5kaWYKI2lmZGVmIElOQUREUl9M T09QQkFDSwogIHNjbV9jX2RlZmluZSAoIklOQUREUl9MT09QQkFDSyIsIHNjbV9mcm9tX3Vsb25n IChJTkFERFJfTE9PUEJBQ0spKTsKI2VuZGlmCgogIC8qIHNvY2tldCB0eXBlcy4KCiAgICAgU09D S19QQUNLRVQgaXMgZGVsaWJlcmF0ZWx5IG9taXR0ZWQsIHRoZSBHTlUvTGludXggc29ja2V0KDIp IGFuZAogICAgIHBhY2tldCg3KSBhZHZpc2UgdGhhdCBpdCdzIG9ic29sZXRlIGFuZCBzdHJvbmds eSBkZXByZWNhdGVkLiAgKi8KCiNpZmRlZiBTT0NLX1NUUkVBTQogIHNjbV9jX2RlZmluZSAoIlNP Q0tfU1RSRUFNIiwgc2NtX2Zyb21faW50IChTT0NLX1NUUkVBTSkpOwojZW5kaWYKI2lmZGVmIFNP Q0tfREdSQU0KICBzY21fY19kZWZpbmUgKCJTT0NLX0RHUkFNIiwgc2NtX2Zyb21faW50IChTT0NL X0RHUkFNKSk7CiNlbmRpZgojaWZkZWYgU09DS19TRVFQQUNLRVQKICBzY21fY19kZWZpbmUgKCJT T0NLX1NFUVBBQ0tFVCIsIHNjbV9mcm9tX2ludCAoU09DS19TRVFQQUNLRVQpKTsKI2VuZGlmCiNp ZmRlZiBTT0NLX1JBVwogIHNjbV9jX2RlZmluZSAoIlNPQ0tfUkFXIiwgc2NtX2Zyb21faW50IChT T0NLX1JBVykpOwojZW5kaWYKI2lmZGVmIFNPQ0tfUkRNCiAgc2NtX2NfZGVmaW5lICgiU09DS19S RE0iLCBzY21fZnJvbV9pbnQgKFNPQ0tfUkRNKSk7CiNlbmRpZgoKICAvKiBzZXRzb2Nrb3B0IGxl dmVsLgoKICAgICBTT0xfSVAsIFNPTF9UQ1AgYW5kIFNPTF9VRFAgYXJlIGRlZmluZWQgb24gZ251 L2xpbnV4LCBidXQgbm90IG9uIGZvcgogICAgIGluc3RhbmNlIE5ldEJTRC4gIFdlIGRlZmluZSBJ UFBST1RPcyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBwb3NpeCBzcGVjCiAgICAgc2hvd3MgaW4g aXRzIGV4YW1wbGUgYXQKCiAgICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMv MDA3OTA0OTc1L2Z1bmN0aW9ucy9nZXRzb2Nrb3B0Lmh0bWwKICAqLwojaWZkZWYgU09MX1NPQ0tF VAogIHNjbV9jX2RlZmluZSAoIlNPTF9TT0NLRVQiLCBzY21fZnJvbV9pbnQgKFNPTF9TT0NLRVQp KTsKI2VuZGlmCiNpZmRlZiBJUFBST1RPX0lQCiAgc2NtX2NfZGVmaW5lICgiSVBQUk9UT19JUCIs IHNjbV9mcm9tX2ludCAoSVBQUk9UT19JUCkpOwojZW5kaWYKI2lmZGVmIElQUFJPVE9fVENQCiAg c2NtX2NfZGVmaW5lICgiSVBQUk9UT19UQ1AiLCBzY21fZnJvbV9pbnQgKElQUFJPVE9fVENQKSk7 CiNlbmRpZgojaWZkZWYgSVBQUk9UT19VRFAKICBzY21fY19kZWZpbmUgKCJJUFBST1RPX1VEUCIs IHNjbV9mcm9tX2ludCAoSVBQUk9UT19VRFApKTsKI2VuZGlmCgogIC8qIHNldHNvY2tvcHQgbmFt ZXMuICAqLwojaWZkZWYgU09fREVCVUcKICBzY21fY19kZWZpbmUgKCJTT19ERUJVRyIsIHNjbV9m cm9tX2ludCAoU09fREVCVUcpKTsKI2VuZGlmCiNpZmRlZiBTT19SRVVTRUFERFIKICBzY21fY19k ZWZpbmUgKCJTT19SRVVTRUFERFIiLCBzY21fZnJvbV9pbnQgKFNPX1JFVVNFQUREUikpOwojZW5k aWYKI2lmZGVmIFNPX1NUWUxFCiAgc2NtX2NfZGVmaW5lICgiU09fU1RZTEUiLCBzY21fZnJvbV9p bnQgKFNPX1NUWUxFKSk7CiNlbmRpZgojaWZkZWYgU09fVFlQRQogIHNjbV9jX2RlZmluZSAoIlNP X1RZUEUiLCBzY21fZnJvbV9pbnQgKFNPX1RZUEUpKTsKI2VuZGlmCiNpZmRlZiBTT19FUlJPUgog IHNjbV9jX2RlZmluZSAoIlNPX0VSUk9SIiwgc2NtX2Zyb21faW50IChTT19FUlJPUikpOwojZW5k aWYKI2lmZGVmIFNPX0RPTlRST1VURQogIHNjbV9jX2RlZmluZSAoIlNPX0RPTlRST1VURSIsIHNj bV9mcm9tX2ludCAoU09fRE9OVFJPVVRFKSk7CiNlbmRpZgojaWZkZWYgU09fQlJPQURDQVNUCiAg c2NtX2NfZGVmaW5lICgiU09fQlJPQURDQVNUIiwgc2NtX2Zyb21faW50IChTT19CUk9BRENBU1Qp KTsKI2VuZGlmCiNpZmRlZiBTT19TTkRCVUYKICBzY21fY19kZWZpbmUgKCJTT19TTkRCVUYiLCBz Y21fZnJvbV9pbnQgKFNPX1NOREJVRikpOwojZW5kaWYKI2lmZGVmIFNPX1JDVkJVRgogIHNjbV9j X2RlZmluZSAoIlNPX1JDVkJVRiIsIHNjbV9mcm9tX2ludCAoU09fUkNWQlVGKSk7CiNlbmRpZgoj aWZkZWYgU09fS0VFUEFMSVZFCiAgc2NtX2NfZGVmaW5lICgiU09fS0VFUEFMSVZFIiwgc2NtX2Zy b21faW50IChTT19LRUVQQUxJVkUpKTsKI2VuZGlmCiNpZmRlZiBTT19PT0JJTkxJTkUKICBzY21f Y19kZWZpbmUgKCJTT19PT0JJTkxJTkUiLCBzY21fZnJvbV9pbnQgKFNPX09PQklOTElORSkpOwoj ZW5kaWYKI2lmZGVmIFNPX05PX0NIRUNLCiAgc2NtX2NfZGVmaW5lICgiU09fTk9fQ0hFQ0siLCBz Y21fZnJvbV9pbnQgKFNPX05PX0NIRUNLKSk7CiNlbmRpZgojaWZkZWYgU09fUFJJT1JJVFkKICBz Y21fY19kZWZpbmUgKCJTT19QUklPUklUWSIsIHNjbV9mcm9tX2ludCAoU09fUFJJT1JJVFkpKTsK I2VuZGlmCiNpZmRlZiBTT19MSU5HRVIKICBzY21fY19kZWZpbmUgKCJTT19MSU5HRVIiLCBzY21f ZnJvbV9pbnQgKFNPX0xJTkdFUikpOwojZW5kaWYKCiAgLyogcmVjdi9zZW5kIG9wdGlvbnMuICAq LwojaWZkZWYgTVNHX0RPTlRXQUlUCiAgc2NtX2NfZGVmaW5lICgiTVNHX0RPTlRXQUlUIiwgc2Nt X2Zyb21faW50IChNU0dfRE9OVFdBSVQpKTsKI2VuZGlmCiNpZmRlZiBNU0dfT09CCiAgc2NtX2Nf ZGVmaW5lICgiTVNHX09PQiIsIHNjbV9mcm9tX2ludCAoTVNHX09PQikpOwojZW5kaWYKI2lmZGVm IE1TR19QRUVLCiAgc2NtX2NfZGVmaW5lICgiTVNHX1BFRUsiLCBzY21fZnJvbV9pbnQgKE1TR19Q RUVLKSk7CiNlbmRpZgojaWZkZWYgTVNHX0RPTlRST1VURQogIHNjbV9jX2RlZmluZSAoIk1TR19E T05UUk9VVEUiLCBzY21fZnJvbV9pbnQgKE1TR19ET05UUk9VVEUpKTsKI2VuZGlmCgojaWZkZWYg X19NSU5HVzMyX18KICBzY21faV9pbml0X3NvY2tldF9XaW4zMiAoKTsKI2VuZGlmCgojaWZkZWYg SVBfQUREX01FTUJFUlNISVAKICBzY21fY19kZWZpbmUgKCJJUF9BRERfTUVNQkVSU0hJUCIsIHNj bV9mcm9tX2ludCAoSVBfQUREX01FTUJFUlNISVApKTsKICBzY21fY19kZWZpbmUgKCJJUF9EUk9Q X01FTUJFUlNISVAiLCBzY21fZnJvbV9pbnQgKElQX0RST1BfTUVNQkVSU0hJUCkpOwojZW5kaWYK CiNpZmRlZiBJUF9NVUxUSUNBU1RfVFRMIAogIHNjbV9jX2RlZmluZSAoIklQX01VTFRJQ0FTVF9U VEwiLCBzY21fZnJvbV9pbnQgKCBJUF9NVUxUSUNBU1RfVFRMKSk7CiNlbmRpZgoKI2lmZGVmIElQ X01VTFRJQ0FTVF9JRiAKICBzY21fY19kZWZpbmUgKCJJUF9NVUxUSUNBU1RfSUYiLCBzY21fZnJv bV9pbnQgKCBJUF9NVUxUSUNBU1RfSUYpKTsKI2VuZGlmCgogIHNjbV9hZGRfZmVhdHVyZSAoInNv Y2tldCIpOwoKI2luY2x1ZGUgImxpYmd1aWxlL3NvY2tldC54Igp9CgoKLyoKICBMb2NhbCBWYXJp YWJsZXM6CiAgYy1maWxlLXN0eWxlOiAiZ251IgogIEVuZDoKKi8K --Boundary_(ID_X4UeYizexOpn37eHUJ41wQ)--