From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15AC5C49ED7 for ; Fri, 20 Sep 2019 00:13:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B712421920 for ; Fri, 20 Sep 2019 00:13:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938401; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:List-ID:From; b=RbybOrR42FKdlNpQpIh0j+8DHhe9d3qwArfYDnPtHzz18AHvYCIFvh0CoMtxHJm8+ QQ0fx5p9kafwq0Wmg9XLYFhK3Zw0E38JmtcLUkyh4f4BUFXiBW252SJRql0HFhQy0i RqccuBjOuovPRULyxYihnd3SZBrYkOJvKt3NO3HE= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394373AbfITANU (ORCPT ); Thu, 19 Sep 2019 20:13:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:33662 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393702AbfITANU (ORCPT ); Thu, 19 Sep 2019 20:13:20 -0400 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B36CD21920; Fri, 20 Sep 2019 00:13:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938398; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=ARio8/iPTeDTzHJev/ZtCVsx/Sc8QM769WOnao31YkjCZ7ky53P5K9d/FugFi8NPE XEyONzCfi2gcO7kubI0Q2pyvtJfUyKQMfHz7e/3PeM2ql/6w+gGllHKRwZvRuNmyRS TibBLoHEa9eKLPHxpVgcsVpPOLHACRmbgFfjlyCU= Received: by mail-wr1-f45.google.com with SMTP id l11so4935613wrx.5; Thu, 19 Sep 2019 17:13:17 -0700 (PDT) X-Gm-Message-State: APjAAAUzwM3M7C5pPlao326aw/hwFVGgyUSIih2Q3PLOSWGBxQHQBB5U JDKcA9oqLoa76ySC/mmoOdzmMEd2V2IUevKSWa0= X-Google-Smtp-Source: APXvYqydI+4EP3dsUrXmWLL5d6kf6TOOLzgdqvDVz56Rpd9MEYS9ZdQysBuqWQS8Yi2tncEfXArIbYtOUMedD24HhZA= X-Received: by 2002:a5d:66d2:: with SMTP id k18mr8973963wrw.7.1568938396076; Thu, 19 Sep 2019 17:13:16 -0700 (PDT) MIME-Version: 1.0 References: <1568896556-28769-1-git-send-email-guoren@kernel.org> In-Reply-To: From: Guo Ren Date: Fri, 20 Sep 2019 08:13:02 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma To: Andrew Waterman Cc: Anup Patel , Atish Patra , Guo Ren , benh@kernel.crashing.org, Catalin Marinas , dwmw2@infradead.org, feiteng_li@c-sky.com, gary@garyguo.net, iommu@lists.linux-foundation.org, jacob.jun.pan@linux.intel.com, Jean-Philippe Brucker , Julien Grall , julien.thierry@arm.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, Linux Kernel Mailing List , linux-riscv@lists.infradead.org, Marc Zyngier , Palmer Dabbelt , Mike Rapoport , tech-privileged@lists.riscv.org, Will Deacon Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Fri, Sep 20, 2019 at 12:10 AM Andrew Waterman wrote: > > This needs to be discussed and debated at length; proposing edits to the = spec at this stage is putting the cart before the horse! Agree :) > > We shouldn=E2=80=99t change the definition of the existing SFENCE.VMA ins= truction to accomplish this. It=E2=80=99s also not abundantly clear to me t= hat this should be an instruction: If you implement sfence.vma as current define, it also could work with new mechanism, they are compatible. > TLB shootdown looks more like MMIO. Per-CPU MMIO ? I the proposal, every hart only takes care of its own reques= t. > > On Thu, Sep 19, 2019 at 5:36 AM Guo Ren wrote: >> >> From: Guo Ren >> >> The patch is for https://github.com/riscv/riscv-isa-manual >> >> The proposal has been talked in LPC-2019 RISC-V MC ref [1]. Here is the >> formal patch. >> >> Introduction >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> >> Using the Hardware TLB broadcast invalidation instruction to maintain th= e >> system TLB is a good choice and it'll simplify the system software desig= n. >> The proposal hopes to add a broadcast mode to the sfence.vma in the >> riscv-privilege specification. To support the sfence.vma broadcast mode, >> there are two modification introduced below: >> >> 1) Add PGD.PPN (root page table's PPN) as the unique identifier of the >> address space in addition to asid/vmid. Compared to the dynamically >> changed asid/vmid, PGD.PPN is fixed throughout the address space lif= e >> cycle. This feature enables uniform address space identification >> between different TLB systems (actually, it's difficult to unify the >> asid/vmid between the CPU system and the IOMMU system, because their >> mechanisms are different) >> >> 2) Modify the definition of the sfence.vma instruction from synchronous >> mode to asynchronous mode, which means that the completion of the TL= B >> operation is not guaranteed when the sfence.vma instruction retires. >> It needs to be completed by checking the flag bit on the hart. The >> sfence.vma request finish can notify the software by generating an >> interrupt. This function alleviates the large delay of TLB invalidat= ion >> in the PCI ATS system. >> >> Add S1/S2.PGD.PPN for ASID/VMID >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D >> >> PGD is global directory (defined in linux) and PPN is page physical numb= er >> (defined in riscv-spec). PGD.PNN corresponds to the root page table poin= ter >> of the address space, i.e. mm->pgd (linux concept). >> >> In CPU/IOMMU TLB, we use asid/vmid to distinguish the address space of >> process or virtual machine. Due to the limitation of id encoding, it can >> only represent a part(window) of the address space. S1/S2.PGD.PPN are th= e >> root page table's PPNs of the address spaces and S1/S2.PGD.PPN are the >> unique identifier of the address spaces. >> >> For the CPU SMP system, you can use context switch to perform the necess= ary >> software mechanism to ensure that the asid/vmid on all harts is consiste= nt >> (please refer to the arm64 asid mechanism). In this way, the TLB broadca= st >> invalidation instruction can determine the address space processed on al= l >> harts by asid/vmid. >> >> Different from the CPU SMP system, there is no context switch for the >> DMA-IOMMU system, so the unification with the CPU asid/vmid cannot be >> guaranteed. So we need a unique identifier for the address space to >> establish a communication bridge between the TLBs of different systems. >> >> That is PGD.PPN (for virtualization scenarios: S1/S2.PGD.PPN) >> >> current: >> sfence.vma rs1 =3D vaddr, rs2 =3D asid >> hfence.vvma rs1 =3D vaddr, rs2 =3D asid >> hfence.gvma rs1 =3D gaddr, rs2 =3D vmid >> >> proposed: >> sfence.vma rs1 =3D vaddr, rs2 =3D mode:ppn:asid >> hfence.vvma rs1 =3D vaddr, rs2 =3D mode:ppn:asid >> hfence.gvma rs1 =3D gaddr, rs2 =3D mode:ppn:vmid >> >> mode - broadcast | local >> ppn - the PPN of the address space of the root page table >> vmid/asid - the window identifier of the address space >> >> At the Linux Plumber Conference 2019 RISCV-MC, ref:[1], we've showed two >> IOMMU examples to explain how it work with hardware. >> >> 1) In a lightweight IOMMU system (up to 64 address spaces), the hardware >> could directly convert PGD.PPN into DID (IOMMU ASID) >> >> 2) For the PCI ATS scenario, its IO ASID/VMID encoding space can support >> a very large number of address spaces. We use two reverse mapping >> tables to let the hardware translate S1/S2.PGD.PPN into IO ASID/VMID. >> >> ASYNC BROADCAST SFENCE.VMA >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D >> >> To support the high latency broadcast sfence.vma operation in the PCI AT= S >> usage scenario, we modify the sfence.vma from synchronous mode to >> asynchronous mode. (For simpler implementation, if hardware only impleme= nt >> synchronous mode and software still work in asynchronous mode) >> >> To implement the asynchronous mode, 3 features are added: >> 1) sstatus:TLBI >> A "status bit - TLBI" is added to the sstatus register. The TLBI sta= tus >> bit indicates if there are still outstanding sfence.vma requests on = the >> current hart. >> Value: >> 1: sfence.vma requests are not completed. >> 0: all sfece.vma requests completed, request queue is empty. >> >> 2) sstatus:TLBIC >> A "control bits - TLBIC" is added to sstatus register. The TLBIC con= trol >> bits are controlled by software. >> "Write 1" will trigger the current hart check to see if there are st= ill >> outstanding sfence.vma requests. If there are unfinished requests, a= n >> interrupt will be generated when the request is completed, notifying= the >> software that all of the current sfence.vma requests have been compl= eted. >> "Write 0" will cause nothing. >> >> 3) supervisor interrupt register (sip & sie):TLBI finish interrupt >> A per-hart interrupt is added to supervisor interrupt registers. >> When all sfence.vma requests are completed and sstatus:TLBIC has bee= n >> triggered, hart will receive a TLBI finish interrupt. Just like time= r, >> software and external interrupt's definition in sip & sie. >> >> Fake code: >> >> flush_tlb_page(vma, addr) { >> asid =3D cpu_asid(vma->vm_mm); >> ppn =3D PFN_DOWN(vma->vm_mm->pgd); >> >> sfence.vma (addr, 1|PPN_OFFSET(ppn)|asid); //1. start request >> >> while(sstatus:TLBI) if (time_out() > 1ms) break; //2. loop check >> >> while (sstatus:TLBI) { >> ... >> set sstatus:TLBIC; >> wait_TLBI_finish_interrupt(); //3. wait irq, io_schedule >> } >> } >> >> Here we give 2 level check: >> 1) loop check sstatus:TLBI, CPU could response Interrupt. >> 2) set sstatus:TLBIC and wait for irq, CPU schedule out for other task. >> >> ACE-DVM Example >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> >> Honestly, "broadcasting addr, asid, vmid, S1/S2.PGD.PPN to interconnects= " >> and "ASYNC SFENCE.VMA" could be implemented by ACE-DVM protocol ref [2]. >> >> There are 3 types of transactions in DVM: >> >> - DVM operation >> Send all information to the interconnect, including addr, asid, >> S1.PGD.PPN, vmid, S2.PGD.PPN. >> >> - DVM synchronization >> Check that all DVM operations have been completed. If not, it will us= e >> state machine to wait DVM complete requests. >> >> - DVM complete >> Return transaction from components, eg: IOMMU. If hart has received a= ll >> DVM completes which are triggered by sfence.vma instructions and >> "sstatus:TLBIC" has been set, a TLBI finish interrupt is triggered. >> >> (Actually, we do not need to implement the above functions strictly >> according to the ACE specification :P ) >> >> 1: https://www.linuxplumbersconf.org/event/4/contributions/307/ >> 2: AMBA AXI and ACE Protocol Specification - Distributed Virtual Memory >> Transactions" >> >> Signed-off-by: Guo Ren >> Reviewed-by: Li Feiteng >> --- >> src/hypervisor.tex | 43 ++++++++------- >> src/supervisor.tex | 155 +++++++++++++++++++++++++++++++++++++++++-----= ------- >> 2 files changed, 143 insertions(+), 55 deletions(-) >> >> diff --git a/src/hypervisor.tex b/src/hypervisor.tex >> index 47b90b2..3718819 100644 >> --- a/src/hypervisor.tex >> +++ b/src/hypervisor.tex >> @@ -1094,15 +1094,15 @@ The hypervisor extension adds two new privileged= fence instructions. >> \multicolumn{1}{c|}{opcode} \\ >> \hline >> 7 & 5 & 5 & 3 & 5 & 7 \\ >> -HFENCE.GVMA & vmid & gaddr & PRIV & 0 & SYSTEM \\ >> -HFENCE.VVMA & asid & vaddr & PRIV & 0 & SYSTEM \\ >> +HFENCE.GVMA & mode:ppn:vmid & gaddr & PRIV & 0 & SYSTEM \\ >> +HFENCE.VVMA & mode:ppn:asid & vaddr & PRIV & 0 & SYSTEM \\ >> \end{tabular} >> \end{center} >> >> The hypervisor memory-management fence instructions, HFENCE.GVMA and >> HFENCE.VVMA, are valid only in HS-mode when {\tt mstatus}.TVM=3D0, or i= n M-mode >> (irrespective of {\tt mstatus}.TVM). >> -These instructions perform a function similar to SFENCE.VMA >> +These instructions perform a function similar to SFENCE.VMA (broadcast/= local) >> (Section~\ref{sec:sfence.vma}), except applying to the guest-physical >> memory-management data structures controlled by CSR {\tt hgatp} (HFENCE= .GVMA) >> or the VS-level memory-management data structures controlled by CSR {\t= t vsatp} >> @@ -1136,11 +1136,10 @@ An HFENCE.VVMA instruction applies only to a sin= gle virtual machine, identified >> by the setting of {\tt hgatp}.VMID when HFENCE.VVMA executes. >> \end{commentary} >> >> -When {\em rs2}$\neq${\tt x0}, bits XLEN-1:ASIDMAX of the value held in = {\em >> -rs2} are reserved for future use and should be zeroed by software and i= gnored >> -by current implementations. >> -Furthermore, if ASIDLEN~$<$~ASIDMAX, the implementation shall ignore bi= ts >> -ASIDMAX-1:ASIDLEN of the value held in {\em rs2}. >> +When {\em rs2}$\neq${\tt x0}, bits contain 3 informations: mode, ppn, a= sid. >> +1) mode control HFENCE.VVMA broadcast or not. >> +2) ppn is the root page talbe's PPN of the asid address space. >> +3) asid is the identifier of process in virtual machine. >> >> \begin{commentary} >> Simpler implementations of HFENCE.VVMA can ignore the guest virtual add= ress in >> @@ -1168,11 +1167,10 @@ physical addresses in PMP address registers (Sec= tion~\ref{sec:pmp}) and in page >> table entries (Sections \ref{sec:sv32}, \ref{sec:sv39}, and~\ref{sec:sv= 48}). >> \end{commentary} >> >> -When {\em rs2}$\neq${\tt x0}, bits XLEN-1:VMIDMAX of the value held in = {\em >> -rs2} are reserved for future use and should be zeroed by software and i= gnored >> -by current implementations. >> -Furthermore, if VMIDLEN~$<$~VMIDMAX, the implementation shall ignore bi= ts >> -VMIDMAX-1:VMIDLEN of the value held in {\em rs2}. >> +When {\em rs2}$\neq${\tt x0}, bits contain 3 informations: mode, vmid, = ppn. >> +1) mode control HFENCE.GVMA broadcast or not. >> +2) ppn is the root page talbe's PPN of the vmid address space. >> +3) vmid is the identifier of virtual machine. >> >> \begin{commentary} >> Simpler implementations of HFENCE.GVMA can ignore the guest physical ad= dress in >> @@ -1567,21 +1565,22 @@ register. >> \subsection{Memory-Management Fences} >> >> The behavior of the SFENCE.VMA instruction is affected by the current >> -virtualization mode V. When V=3D0, the virtual-address argument is an = HS-level >> -virtual address, and the ASID argument is an HS-level ASID. >> +virtualization mode V. When V=3D0, the rs1 argument is an HS-level >> +virtual address, and the rs2 argument is an HS-level ASID and root page= table's PPN. >> The instruction orders stores only to HS-level address-translation stru= ctures >> with subsequent HS-level address translations. >> >> -When V=3D1, the virtual-address argument to SFENCE.VMA is a guest virtu= al >> -address within the current virtual machine, and the ASID argument is a = VS-level >> -ASID within the current virtual machine. >> +When V=3D1, the rs1 argument to SFENCE.VMA is a guest virtual >> +address within the current virtual machine, and the rs2 argument is a V= S-level >> +ASID and root page table's PPN within the current virtual machine. >> The current virtual machine is identified by the VMID field of CSR {\tt= hgatp}, >> -and the effective ASID can be considered to be the combination of this = VMID >> -with the VS-level ASID. >> +and the effective ASID and root page table's PPN can be considered to b= e the >> +combination of this VMID and root page table's PPN with the VS-level AS= ID and >> +root page table's PPN. >> The SFENCE.VMA instruction orders stores only to the VS-level >> address-translation structures with subsequent VS-level address transla= tions >> -for the same virtual machine, i.e., only when {\tt hgatp}.VMID is the s= ame as >> -when the SFENCE.VMA executed. >> +for the same virtual machine, i.e., only when {\tt hgatp}.VMID and {\\t= t hgatp}.PPN is >> +the same as when the SFENCE.VMA executed. >> >> Hypervisor instructions HFENCE.GVMA and HFENCE.VVMA provide additional >> memory-management fences to complement SFENCE.VMA. >> diff --git a/src/supervisor.tex b/src/supervisor.tex >> index ba3ced5..2877b7a 100644 >> --- a/src/supervisor.tex >> +++ b/src/supervisor.tex >> @@ -47,10 +47,12 @@ register keeps track of the processor's current oper= ating state. >> \begin{center} >> \setlength{\tabcolsep}{4pt} >> \scalebox{0.95}{ >> -\begin{tabular}{cWcccccWccccWcc} >> +\begin{tabular}{cccWcccccWccccWcc} >> \\ >> \instbit{31} & >> -\instbitrange{30}{20} & >> +\instbit{30} & >> +\instbit{29} & >> +\instbitrange{28}{20} & >> \instbit{19} & >> \instbit{18} & >> \instbit{17} & >> @@ -66,6 +68,8 @@ register keeps track of the processor's current operat= ing state. >> \instbit{0} \\ >> \hline >> \multicolumn{1}{|c|}{SD} & >> +\multicolumn{1}{|c|}{TLBI} & >> +\multicolumn{1}{|c|}{TLBIC} & >> \multicolumn{1}{c|}{\wpri} & >> \multicolumn{1}{c|}{MXR} & >> \multicolumn{1}{c|}{SUM} & >> @@ -82,7 +86,7 @@ register keeps track of the processor's current operat= ing state. >> \multicolumn{1}{c|}{\wpri} >> \\ >> \hline >> -1 & 11 & 1 & 1 & 1 & 2 & 2 & 4 & 1 & 1 & 1 & 1 & 3 & 1 & 1 \\ >> +1 & 1 & 1 & 10 & 1 & 1 & 1 & 2 & 2 & 4 & 1 & 1 & 1 & 1 & 3 & 1 & 1 \\ >> \end{tabular}} >> \end{center} >> } >> @@ -95,10 +99,12 @@ register keeps track of the processor's current oper= ating state. >> {\footnotesize >> \begin{center} >> \setlength{\tabcolsep}{4pt} >> -\begin{tabular}{cMFScccc} >> +\begin{tabular}{cccMFScccc} >> \\ >> \instbit{SXLEN-1} & >> -\instbitrange{SXLEN-2}{34} & >> +\instbit{SXLEN-2} & >> +\instbit{SXLEN-3} & >> +\instbitrange{SXLEN-4}{34} & >> \instbitrange{33}{32} & >> \instbitrange{31}{20} & >> \instbit{19} & >> @@ -107,6 +113,8 @@ register keeps track of the processor's current oper= ating state. >> \\ >> \hline >> \multicolumn{1}{|c|}{SD} & >> +\multicolumn{1}{|c|}{TLBI} & >> +\multicolumn{1}{|c|}{TLBIC} & >> \multicolumn{1}{c|}{\wpri} & >> \multicolumn{1}{c|}{UXL[1:0]} & >> \multicolumn{1}{c|}{\wpri} & >> @@ -115,7 +123,7 @@ register keeps track of the processor's current oper= ating state. >> \multicolumn{1}{c|}{\wpri} & >> \\ >> \hline >> -1 & SXLEN-35 & 2 & 12 & 1 & 1 & 1 & \\ >> +1 & 1 & 1 & SXLEN-37 & 2 & 12 & 1 & 1 & 1 & \\ >> \end{tabular} >> \begin{tabular}{cWWFccccWcc} >> \\ >> @@ -152,6 +160,17 @@ register keeps track of the processor's current ope= rating state. >> \label{sstatusreg} >> \end{figure*} >> >> +The TLBI (read-only) bit indicates that any async sfence.vma operations= are >> +still pended on the hart. The value:0 means that there is no sfence.vma >> +operations pending and value:1 means that there are still sfence.vma op= erations >> +pending on the hart. >> + >> +When the sstatus:TLBIC bit is written 1, it triggers the hardware to ch= eck if >> +there are any TLB invalidate operations being pended. When all operatio= ns are >> +finished, a TLB Invalidate finish interrupt will be triggered >> +(see Section~\ref{sipreg}). When the sstatus:TLBIC bit is written 0, it= will >> +cause nothing. Reading sstatus:TLBIC bit will alaways return 0. >> + >> The SPP bit indicates the privilege level at which a hart was executing= before >> entering supervisor mode. When a trap is taken, SPP is set to 0 if the= trap >> originated from user mode, or 1 otherwise. When an SRET instruction >> @@ -329,8 +348,10 @@ SXLEN-bit read/write register containing interrupt = enable bits. >> {\footnotesize >> \begin{center} >> \setlength{\tabcolsep}{4pt} >> -\begin{tabular}{KcFcFcc} >> -\instbitrange{SXLEN-1}{10} & >> +\begin{tabular}{KcFcFcFcc} >> +\instbitrange{SXLEN-1}{14} & >> +\instbit{13} & >> +\instbitrange{12}{10} & >> \instbit{9} & >> \instbitrange{8}{6} & >> \instbit{5} & >> @@ -339,6 +360,8 @@ SXLEN-bit read/write register containing interrupt e= nable bits. >> \instbit{0} \\ >> \hline >> \multicolumn{1}{|c|}{\wpri} & >> +\multicolumn{1}{c|}{STLBIP} & >> +\multicolumn{1}{|c|}{\wpri} & >> \multicolumn{1}{c|}{SEIP} & >> \multicolumn{1}{c|}{\wpri} & >> \multicolumn{1}{c|}{STIP} & >> @@ -346,7 +369,7 @@ SXLEN-bit read/write register containing interrupt e= nable bits. >> \multicolumn{1}{c|}{SSIP} & >> \multicolumn{1}{c|}{\wpri} \\ >> \hline >> -SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> +SXLEN-14 & 1 & 3 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> \end{tabular} >> \end{center} >> } >> @@ -359,8 +382,10 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> {\footnotesize >> \begin{center} >> \setlength{\tabcolsep}{4pt} >> -\begin{tabular}{KcFcFcc} >> -\instbitrange{SXLEN-1}{10} & >> +\begin{tabular}{KcFcFcFcc} >> +\instbitrange{SXLEN-1}{14} & >> +\instbit{13} & >> +\instbitrange{12}{10} & >> \instbit{9} & >> \instbitrange{8}{6} & >> \instbit{5} & >> @@ -369,6 +394,8 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> \instbit{0} \\ >> \hline >> \multicolumn{1}{|c|}{\wpri} & >> +\multicolumn{1}{c|}{STLBIE} & >> +\multicolumn{1}{|c|}{\wpri} & >> \multicolumn{1}{c|}{SEIE} & >> \multicolumn{1}{c|}{\wpri} & >> \multicolumn{1}{c|}{STIE} & >> @@ -376,7 +403,7 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> \multicolumn{1}{c|}{SSIE} & >> \multicolumn{1}{c|}{\wpri} \\ >> \hline >> -SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> +SXLEN-14 & 1 & 3 & 1 & 3 & 1 & 3 & 1 & 1 \\ >> \end{tabular} >> \end{center} >> } >> @@ -410,6 +437,12 @@ when the SEIE bit in the {\tt sie} register is clea= r. The implementation >> should provide facilities to mask, unmask, and query the cause of exter= nal >> interrupts. >> >> +A supervisor-level TLB Invalidate finish interrupt is pending if the ST= LBIP bit >> +in the {\tt sip} register is set. Supervisor-level TLB Invalidate fini= sh >> +interrupts are disabled when the STLBIE bit in the {\tt sie} register i= s clear. >> +When hart tlb invalidate operations are finished, hardware will change = sstatus:TLBI >> +bit from 1 to 0 and trigger TLB Invalidate finish interrupt. >> + >> \begin{commentary} >> The {\tt sip} and {\tt sie} registers are subsets of the {\tt mip} and = {\tt >> mie} registers. Reading any field, or writing any writable field, of {= \tt >> @@ -598,7 +631,9 @@ so is only guaranteed to hold supported exception co= des. >> 1 & 5 & Supervisor timer interrupt \\ >> 1 & 6--8 & {\em Reserved} \\ >> 1 & 9 & Supervisor external interrupt \\ >> - 1 & 10--15 & {\em Reserved} \\ >> + 1 & 10--11 & {\em Reserved} \\ >> + 1 & 12 & Supervisor TLBI finish interrupt \\ >> + 1 & 13--15 & {\em Reserved} \\ >> 1 & $\ge$16 & {\em Available for platform use} \\ \hl= ine >> 0 & 0 & Instruction address misaligned \\ >> 0 & 1 & Instruction access fault \\ >> @@ -884,7 +919,7 @@ provided. >> \multicolumn{1}{c|}{opcode} \\ >> \hline >> 7 & 5 & 5 & 3 & 5 & 7 \\ >> -SFENCE.VMA & asid & vaddr & PRIV & 0 & SYSTEM \\ >> +SFENCE.VMA & mode:ppn:asid & vaddr & LOCAL & 0 & SYSTEM \\ >> \end{tabular} >> \end{center} >> >> @@ -899,21 +934,70 @@ from that hart to the memory-management data struc= tures. >> Further details on the behavior of this instruction are >> described in Section~\ref{virt-control} and Section~\ref{pmp-vmem}. >> >> +SFENCE.VMA is defined as an asynchronous completion instruction, which = means >> +that the TLB operation is not guaranteed to complete when the instructi= on retires. >> +Software need check sstatus:TLBI to determine all TLB operations comple= te. >> +The sstatus:TLBI described in Section~\ref{sstatus}. When hardware chan= ge >> +sstatus:TLBI bit from 1 to 0, the TLB Invalidate finish interrupt will = be >> +triggered. >> + >> \begin{commentary} >> -The SFENCE.VMA is used to flush any local hardware caches related to >> +The SFENCE.VMA is used to flush any local/remote hardware caches relate= d to >> address translation. It is specified as a fence rather than a TLB >> flush to provide cleaner semantics with respect to which instructions >> are affected by the flush operation and to support a wider variety of >> dynamic caching structures and memory-management schemes. SFENCE.VMA >> is also used by higher privilege levels to synchronize page table >> -writes and the address translation hardware. >> +writes and the address translation hardware. There is a mode bit to det= ermine >> +sfence.vma would broadcast on interconnect or not. >> \end{commentary} >> >> -SFENCE.VMA orders only the local hart's implicit references to the >> -memory-management data structures. >> +\begin{figure}[h!] >> +{\footnotesize >> +\begin{center} >> +\begin{tabular}{c@{}E@{}K} >> +\instbit{31} & >> +\instbitrange{30}{9} & >> +\instbitrange{8}{0} \\ >> +\hline >> +\multicolumn{1}{|c|}{{\tt MODE}} & >> +\multicolumn{1}{|c|}{{\tt PPN (root page table)}} & >> +\multicolumn{1}{|c|}{{\tt ASID}} \\ >> +\hline >> +1 & 22 & 9 \\ >> +\end{tabular} >> +\end{center} >> +} >> +\vspace{-0.1in} >> +\caption{RV32 sfence.vma rs2 format.} >> +\label{rv32satp} >> +\end{figure} >> + >> +\begin{figure}[h!] >> +{\footnotesize >> +\begin{center} >> +\begin{tabular}{@{}S@{}T@{}U} >> +\instbitrange{63}{60} & >> +\instbitrange{59}{16} & >> +\instbitrange{15}{0} \\ >> +\hline >> +\multicolumn{1}{|c|}{{\tt MODE}} & >> +\multicolumn{1}{|c|}{{\tt PPN (root page table)}} & >> +\multicolumn{1}{|c|}{{\tt ASID}} \\ >> +\hline >> +4 & 44 & 16 \\ >> +\end{tabular} >> +\end{center} >> +} >> +\vspace{-0.1in} >> +\caption{RV64 sfence.vma rs2 format, for MODE values, only highest bit:= 63 is >> +valid and others are reserved.} >> +\label{rv64satp} >> +\end{figure} >> >> \begin{commentary} >> -Consequently, other harts must be notified separately when the >> +The mode's highest bit could control sfence.vma behavior with 1:broadca= st or 0:local. >> +If only have mode:local, other harts must be notified separately when t= he >> memory-management data structures have been modified. >> One approach is to use 1) >> a local data fence to ensure local writes are visible globally, then >> @@ -928,8 +1012,17 @@ modified for a single address mapping (i.e., one p= age or superpage), {\em rs1} >> can specify a virtual address within that mapping to effect a translati= on >> fence for that mapping only. Furthermore, for the common case that the >> translation data structures have only been modified for a single addres= s-space >> -identifier, {\em rs2} can specify the address space. The behavior of >> -SFENCE.VMA depends on {\em rs1} and {\em rs2} as follows: >> +identifier, {\em rs2} can specify the address space with {\tt satp} for= mat >> +which include asid and root page table's PPN information. >> + >> +\begin{commentary} >> +We use ASID and root page table's PPN to determine address space and th= e format >> +stored in rs2 is similar with {\tt satp} described in Section~\ref{sec:= satp}. >> +ASID are used by local harts and root page table's PPN of the asid are = used by >> +other different TLB systems, eg: IOMMU. >> +\end{commentary} >> + >> +The behavior of SFENCE.VMA depends on {\em rs1} and {\em rs2} as follow= s: >> >> \begin{itemize} >> \item If {\em rs1}=3D{\tt x0} and {\em rs2}=3D{\tt x0}, the fence order= s all >> @@ -939,23 +1032,18 @@ SFENCE.VMA depends on {\em rs1} and {\em rs2} as = follows: >> all reads and writes made to any level of the page tables, but on= ly >> for the address space identified by integer register {\em rs2}. >> Accesses to {\em global} mappings (see Section~\ref{sec:translati= on}) >> - are not ordered. >> + are not ordered. The mode field in rs2 is determine broadcast or = local. >> \item If {\em rs1}$\neq${\tt x0} and {\em rs2}=3D{\tt x0}, the fence or= ders >> only reads and writes made to the leaf page table entry correspon= ding >> to the virtual address in {\em rs1}, for all address spaces. >> \item If {\em rs1}$\neq${\tt x0} and {\em rs2}$\neq${\tt x0}, the fence >> orders only reads and writes made to the leaf page table entry >> corresponding to the virtual address in {\em rs1}, for the addres= s >> - space identified by integer register {\em rs2}. >> + space identified by integer register {\em rs2}. The mode field in= rs2 >> + is determine broadcast or local. >> Accesses to global mappings are not ordered. >> \end{itemize} >> >> -When {\em rs2}$\neq${\tt x0}, bits SXLEN-1:ASIDMAX of the value held in= {\em >> -rs2} are reserved for future use and should be zeroed by software and i= gnored >> -by current implementations. Furthermore, if ASIDLEN~$<$~ASIDMAX, the >> -implementation shall ignore bits ASIDMAX-1:ASIDLEN of the value held in= {\em >> -rs2}. >> - >> \begin{commentary} >> Simpler implementations can ignore the virtual address in {\em rs1} and >> the ASID value in {\em rs2} and always perform a global fence. >> @@ -994,7 +1082,7 @@ can execute the same SFENCE.VMA instruction while a= different ASID is loaded >> into {\tt satp}, provided the next time {\tt satp} is loaded with the r= ecycled >> ASID, it is simultaneously loaded with the new page table. >> >> -\item If the implementation does not provide ASIDs, or software chooses= to >> +\item If the implementation does not provide ASIDs and PPNs, or softwar= e chooses to >> always use ASID 0, then after every {\tt satp} write, software should e= xecute >> SFENCE.VMA with {\em rs1}=3D{\tt x0}. In the common case that no globa= l >> translations have been modified, {\em rs2} should be set to a register = other than >> @@ -1003,13 +1091,14 @@ not flushed. >> >> \item If software modifies a non-leaf PTE, it should execute SFENCE.VMA= with >> {\em rs1}=3D{\tt x0}. If any PTE along the traversal path had its G bi= t set, >> -{\em rs2} must be {\tt x0}; otherwise, {\em rs2} should be set to the A= SID for >> -which the translation is being modified. >> +{\em rs2} must be {\tt x0}; otherwise, {\em rs2} should be set to the A= SID and >> +root page table's PPN for which the translation is being modified. >> >> \item If software modifies a leaf PTE, it should execute SFENCE.VMA wit= h {\em >> rs1} set to a virtual address within the page. If any PTE along the tr= aversal >> path had its G bit set, {\em rs2} must be {\tt x0}; otherwise, {\em rs2= } >> -should be set to the ASID for which the translation is being modified. >> +should be set to the ASID and root page table's PPN for which the trans= lation >> +is being modified. >> >> \item For the special cases of increasing the permissions on a leaf PTE= and >> changing an invalid PTE to a valid leaf, software may choose to execute >> -- >> 2.7.4 >> >> >> -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- >> Links: You receive all messages sent to this group. >> >> View/Reply Online (#810): https://lists.riscv.org/g/tech-privileged/mess= age/810 >> Mute This Topic: https://lists.riscv.org/mt/34198986/1677273 >> Group Owner: tech-privileged+owner@lists.riscv.org >> Unsubscribe: https://lists.riscv.org/g/tech-privileged/unsub [andrew@si= five.com] >> -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- >> --=20 Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 030A4C3A5A6 for ; Fri, 20 Sep 2019 00:13:33 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C61DD206B6 for ; Fri, 20 Sep 2019 00:13:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="h8B+YP9g"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="ARio8/iP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C61DD206B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=sxeMph/ja+VoSl+qkw7FYht7yboiBxDT7m9aCl3hP/s=; b=h8B+YP9gvdIFRx JU5iXukClkd6gVsL+WrC9Z7SUiZFL4cEde9sgg5R96RTxVHyXBSZ+T+3+GF9BFAs2SHM3KURcLBkC C2ngObLgViPSVOQSU/NV3FLtp8twYQfz5rirp/6M0D9i/tej+1Vwz+827SPFwmlRsO/DDg4ORT3H+ xI45LZkVRH0qjuaGRUaqlQYgx5/5zSYOdNpItnikQVR8IPL5cJGdjA6uigLxixb3SDEJ27h3TXxFh 9Xs+CXbwtXjhu5M73DSZ7cmSYlErUFRHVmQKirJZ0XqWVTyTfaxSk7PAOPt7eJ1U/Lo28QVK/l8bI dhX6Vu3yG3fN4Iibpx0Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB6YG-0004wi-4z; Fri, 20 Sep 2019 00:13:32 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB6Y2-0004nX-Ij; Fri, 20 Sep 2019 00:13:22 +0000 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CA5A921A4C; Fri, 20 Sep 2019 00:13:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938398; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=ARio8/iPTeDTzHJev/ZtCVsx/Sc8QM769WOnao31YkjCZ7ky53P5K9d/FugFi8NPE XEyONzCfi2gcO7kubI0Q2pyvtJfUyKQMfHz7e/3PeM2ql/6w+gGllHKRwZvRuNmyRS TibBLoHEa9eKLPHxpVgcsVpPOLHACRmbgFfjlyCU= Received: by mail-wr1-f42.google.com with SMTP id n14so4904169wrw.9; Thu, 19 Sep 2019 17:13:17 -0700 (PDT) X-Gm-Message-State: APjAAAXxKazmSSvdUP5u/Ejum3+uNIiR586sLrKVj8r6iffrzTaew5Mx zaUKmjlGdAtk/rfAS79aCUtIoOvEtVStJnxF74E= X-Google-Smtp-Source: APXvYqydI+4EP3dsUrXmWLL5d6kf6TOOLzgdqvDVz56Rpd9MEYS9ZdQysBuqWQS8Yi2tncEfXArIbYtOUMedD24HhZA= X-Received: by 2002:a5d:66d2:: with SMTP id k18mr8973963wrw.7.1568938396076; Thu, 19 Sep 2019 17:13:16 -0700 (PDT) MIME-Version: 1.0 References: <1568896556-28769-1-git-send-email-guoren@kernel.org> In-Reply-To: From: Guo Ren Date: Fri, 20 Sep 2019 08:13:02 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma To: Andrew Waterman X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190919_171318_675202_A94EF1FB X-CRM114-Status: GOOD ( 21.33 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: julien.thierry@arm.com, Catalin Marinas , Palmer Dabbelt , Will Deacon , Atish Patra , Julien Grall , gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, Jean-Philippe Brucker , linux-csky@vger.kernel.org, Mike Rapoport , Guo Ren , benh@kernel.crashing.org, jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, Marc Zyngier , linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup Patel , Linux Kernel Mailing List , iommu@lists.linux-foundation.org, dwmw2@infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org SGksCgpPbiBGcmksIFNlcCAyMCwgMjAxOSBhdCAxMjoxMCBBTSBBbmRyZXcgV2F0ZXJtYW4gPGFu ZHJld0BzaWZpdmUuY29tPiB3cm90ZToKPgo+IFRoaXMgbmVlZHMgdG8gYmUgZGlzY3Vzc2VkIGFu ZCBkZWJhdGVkIGF0IGxlbmd0aDsgcHJvcG9zaW5nIGVkaXRzIHRvIHRoZSBzcGVjIGF0IHRoaXMg c3RhZ2UgaXMgcHV0dGluZyB0aGUgY2FydCBiZWZvcmUgdGhlIGhvcnNlIQpBZ3JlZSA6KQoKPgo+ IFdlIHNob3VsZG7igJl0IGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZXhpc3RpbmcgU0ZF TkNFLlZNQSBpbnN0cnVjdGlvbiB0byBhY2NvbXBsaXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBh YnVuZGFudGx5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBzaG91bGQgYmUgYW4gaW5zdHJ1Y3Rpb246 CklmIHlvdSBpbXBsZW1lbnQgc2ZlbmNlLnZtYSBhcyBjdXJyZW50IGRlZmluZSwgaXQgYWxzbyBj b3VsZCB3b3JrIHdpdGgKbmV3IG1lY2hhbmlzbSwgdGhleSBhcmUgY29tcGF0aWJsZS4KCj4gVExC IHNob290ZG93biBsb29rcyBtb3JlIGxpa2UgTU1JTy4KUGVyLUNQVSBNTUlPID8gSSB0aGUgcHJv cG9zYWwsIGV2ZXJ5IGhhcnQgb25seSB0YWtlcyBjYXJlIG9mIGl0cyBvd24gcmVxdWVzdC4KCgoK Cj4KPiBPbiBUaHUsIFNlcCAxOSwgMjAxOSBhdCA1OjM2IEFNIEd1byBSZW4gPGd1b3JlbkBrZXJu ZWwub3JnPiB3cm90ZToKPj4KPj4gRnJvbTogR3VvIFJlbiA8cmVuX2d1b0BjLXNreS5jb20+Cj4+ Cj4+IFRoZSBwYXRjaCBpcyBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWlzYS1t YW51YWwKPj4KPj4gVGhlIHByb3Bvc2FsIGhhcyBiZWVuIHRhbGtlZCBpbiBMUEMtMjAxOSBSSVND LVYgTUMgcmVmIFsxXS4gSGVyZSBpcyB0aGUKPj4gZm9ybWFsIHBhdGNoLgo+Pgo+PiBJbnRyb2R1 Y3Rpb24KPj4gPT09PT09PT09PT09Cj4+Cj4+IFVzaW5nIHRoZSBIYXJkd2FyZSBUTEIgYnJvYWRj YXN0IGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbiB0byBtYWludGFpbiB0aGUKPj4gc3lzdGVtIFRM QiBpcyBhIGdvb2QgY2hvaWNlIGFuZCBpdCdsbCBzaW1wbGlmeSB0aGUgc3lzdGVtIHNvZnR3YXJl IGRlc2lnbi4KPj4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBtb2RlIHRv IHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+PiByaXNjdi1wcml2aWxlZ2Ugc3BlY2lmaWNhdGlvbi4g VG8gc3VwcG9ydCB0aGUgc2ZlbmNlLnZtYSBicm9hZGNhc3QgbW9kZSwKPj4gdGhlcmUgYXJlIHR3 byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPj4KPj4gIDEpIEFkZCBQR0QuUFBOIChy b290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUKPj4g ICAgIGFkZHJlc3Mgc3BhY2UgaW4gYWRkaXRpb24gdG8gYXNpZC92bWlkLiBDb21wYXJlZCB0byB0 aGUgZHluYW1pY2FsbHkKPj4gICAgIGNoYW5nZWQgYXNpZC92bWlkLCBQR0QuUFBOIGlzIGZpeGVk IHRocm91Z2hvdXQgdGhlIGFkZHJlc3Mgc3BhY2UgbGlmZQo+PiAgICAgY3ljbGUuIFRoaXMgZmVh dHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVzcyBzcGFjZSBpZGVudGlmaWNhdGlvbgo+PiAgICAg YmV0d2VlbiBkaWZmZXJlbnQgVExCIHN5c3RlbXMgKGFjdHVhbGx5LCBpdCdzIGRpZmZpY3VsdCB0 byB1bmlmeSB0aGUKPj4gICAgIGFzaWQvdm1pZCBiZXR3ZWVuIHRoZSBDUFUgc3lzdGVtIGFuZCB0 aGUgSU9NTVUgc3lzdGVtLCBiZWNhdXNlIHRoZWlyCj4+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZm ZXJlbnQpCj4+Cj4+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEg aW5zdHJ1Y3Rpb24gZnJvbSBzeW5jaHJvbm91cwo+PiAgICAgbW9kZSB0byBhc3luY2hyb25vdXMg bW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgVExCCj4+ICAgICBv cGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgd2hlbiB0aGUgc2ZlbmNlLnZtYSBpbnN0cnVjdGlv biByZXRpcmVzLgo+PiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNraW5nIHRo ZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4gVGhlCj4+ICAgICBzZmVuY2Uudm1hIHJlcXVlc3QgZmlu aXNoIGNhbiBub3RpZnkgdGhlIHNvZnR3YXJlIGJ5IGdlbmVyYXRpbmcgYW4KPj4gICAgIGludGVy cnVwdC4gVGhpcyBmdW5jdGlvbiBhbGxldmlhdGVzIHRoZSBsYXJnZSBkZWxheSBvZiBUTEIgaW52 YWxpZGF0aW9uCj4+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0ZW0uCj4+Cj4+IEFkZCBTMS9TMi5Q R0QuUFBOIGZvciBBU0lEL1ZNSUQKPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ Pgo+PiBQR0QgaXMgZ2xvYmFsIGRpcmVjdG9yeSAoZGVmaW5lZCBpbiBsaW51eCkgYW5kIFBQTiBp cyBwYWdlIHBoeXNpY2FsIG51bWJlcgo+PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBO TiBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBwYWdlIHRhYmxlIHBvaW50ZXIKPj4gb2YgdGhlIGFk ZHJlc3Mgc3BhY2UsIGkuZS4gbW0tPnBnZCAobGludXggY29uY2VwdCkuCj4+Cj4+IEluIENQVS9J T01NVSBUTEIsIHdlIHVzZSBhc2lkL3ZtaWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGFkZHJlc3Mgc3Bh Y2Ugb2YKPj4gcHJvY2VzcyBvciB2aXJ0dWFsIG1hY2hpbmUuIER1ZSB0byB0aGUgbGltaXRhdGlv biBvZiBpZCBlbmNvZGluZywgaXQgY2FuCj4+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cp IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOIGFyZSB0aGUKPj4gcm9vdCBwYWdl IHRhYmxlJ3MgUFBOcyBvZiB0aGUgYWRkcmVzcyBzcGFjZXMgYW5kIFMxL1MyLlBHRC5QUE4gYXJl IHRoZQo+PiB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWRkcmVzcyBzcGFjZXMuCj4+Cj4+IEZv ciB0aGUgQ1BVIFNNUCBzeXN0ZW0sIHlvdSBjYW4gdXNlIGNvbnRleHQgc3dpdGNoIHRvIHBlcmZv cm0gdGhlIG5lY2Vzc2FyeQo+PiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgdGhl IGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMgY29uc2lzdGVudAo+PiAocGxlYXNlIHJlZmVyIHRv IHRoZSBhcm02NCBhc2lkIG1lY2hhbmlzbSkuIEluIHRoaXMgd2F5LCB0aGUgVExCIGJyb2FkY2Fz dAo+PiBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gY2FuIGRldGVybWluZSB0aGUgYWRkcmVzcyBz cGFjZSBwcm9jZXNzZWQgb24gYWxsCj4+IGhhcnRzIGJ5IGFzaWQvdm1pZC4KPj4KPj4gRGlmZmVy ZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVtLCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBm b3IgdGhlCj4+IERNQS1JT01NVSBzeXN0ZW0sIHNvIHRoZSB1bmlmaWNhdGlvbiB3aXRoIHRoZSBD UFUgYXNpZC92bWlkIGNhbm5vdCBiZQo+PiBndWFyYW50ZWVkLiBTbyB3ZSBuZWVkIGEgdW5pcXVl IGlkZW50aWZpZXIgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIHRvCj4+IGVzdGFibGlzaCBhIGNvbW11 bmljYXRpb24gYnJpZGdlIGJldHdlZW4gdGhlIFRMQnMgb2YgZGlmZmVyZW50IHN5c3RlbXMuCj4+ Cj4+IFRoYXQgaXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIu UEdELlBQTikKPj4KPj4gY3VycmVudDoKPj4gIHNmZW5jZS52bWEgIHJzMSA9IHZhZGRyLCByczIg PSBhc2lkCj4+ICBoZmVuY2UudnZtYSByczEgPSB2YWRkciwgcnMyID0gYXNpZAo+PiAgaGZlbmNl Lmd2bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPj4KPj4gcHJvcG9zZWQ6Cj4+ICBzZmVuY2Uu dm1hICByczEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+PiAgaGZlbmNlLnZ2bWEgcnMx ID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPj4gIGhmZW5jZS5ndm1hIHJzMSA9IGdhZGRy LCByczIgPSBtb2RlOnBwbjp2bWlkCj4+Cj4+ICBtb2RlICAgICAgLSBicm9hZGNhc3QgfCBsb2Nh bAo+PiAgcHBuICAgICAgIC0gdGhlIFBQTiBvZiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgcm9v dCBwYWdlIHRhYmxlCj4+ICB2bWlkL2FzaWQgLSB0aGUgd2luZG93IGlkZW50aWZpZXIgb2YgdGhl IGFkZHJlc3Mgc3BhY2UKPj4KPj4gQXQgdGhlIExpbnV4IFBsdW1iZXIgQ29uZmVyZW5jZSAyMDE5 IFJJU0NWLU1DLCByZWY6WzFdLCB3ZSd2ZSBzaG93ZWQgdHdvCj4+IElPTU1VIGV4YW1wbGVzIHRv IGV4cGxhaW4gaG93IGl0IHdvcmsgd2l0aCBoYXJkd2FyZS4KPj4KPj4gMSkgSW4gYSBsaWdodHdl aWdodCBJT01NVSBzeXN0ZW0gKHVwIHRvIDY0IGFkZHJlc3Mgc3BhY2VzKSwgdGhlIGhhcmR3YXJl Cj4+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdELlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJ RCkKPj4KPj4gMikgRm9yIHRoZSBQQ0kgQVRTIHNjZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVu Y29kaW5nIHNwYWNlIGNhbiBzdXBwb3J0Cj4+ICAgIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgYWRk cmVzcyBzcGFjZXMuIFdlIHVzZSB0d28gcmV2ZXJzZSBtYXBwaW5nCj4+ICAgIHRhYmxlcyB0byBs ZXQgdGhlIGhhcmR3YXJlIHRyYW5zbGF0ZSBTMS9TMi5QR0QuUFBOIGludG8gSU8gQVNJRC9WTUlE Lgo+Pgo+PiBBU1lOQyBCUk9BRENBU1QgU0ZFTkNFLlZNQQo+PiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPj4KPj4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVu Y2Uudm1hIG9wZXJhdGlvbiBpbiB0aGUgUENJIEFUUwo+PiB1c2FnZSBzY2VuYXJpbywgd2UgbW9k aWZ5IHRoZSBzZmVuY2Uudm1hIGZyb20gc3luY2hyb25vdXMgbW9kZSB0bwo+PiBhc3luY2hyb25v dXMgbW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5IGlt cGxlbWVudAo+PiBzeW5jaHJvbm91cyBtb2RlIGFuZCBzb2Z0d2FyZSBzdGlsbCB3b3JrIGluIGFz eW5jaHJvbm91cyBtb2RlKQo+Pgo+PiBUbyBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBtb2Rl LCAzIGZlYXR1cmVzIGFyZSBhZGRlZDoKPj4gIDEpIHNzdGF0dXM6VExCSQo+PiAgICAgQSAic3Rh dHVzIGJpdCAtIFRMQkkiIGlzIGFkZGVkIHRvIHRoZSBzc3RhdHVzIHJlZ2lzdGVyLiBUaGUgVExC SSBzdGF0dXMKPj4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5k aW5nIHNmZW5jZS52bWEgcmVxdWVzdHMgb24gdGhlCj4+ICAgICBjdXJyZW50IGhhcnQuCj4+ICAg ICBWYWx1ZToKPj4gICAgICAgMTogc2ZlbmNlLnZtYSByZXF1ZXN0cyBhcmUgbm90IGNvbXBsZXRl ZC4KPj4gICAgICAgMDogYWxsIHNmZWNlLnZtYSByZXF1ZXN0cyBjb21wbGV0ZWQsIHJlcXVlc3Qg cXVldWUgaXMgZW1wdHkuCj4+Cj4+ICAyKSBzc3RhdHVzOlRMQklDCj4+ICAgICBBICJjb250cm9s IGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1cyByZWdpc3Rlci4gVGhlIFRMQklDIGNv bnRyb2wKPj4gICAgIGJpdHMgYXJlIGNvbnRyb2xsZWQgYnkgc29mdHdhcmUuCj4+ICAgICAiV3Jp dGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJyZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJl IGFyZSBzdGlsbAo+PiAgICAgb3V0c3RhbmRpbmcgc2ZlbmNlLnZtYSByZXF1ZXN0cy4gSWYgdGhl cmUgYXJlIHVuZmluaXNoZWQgcmVxdWVzdHMsIGFuCj4+ICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBn ZW5lcmF0ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIG5vdGlmeWluZyB0aGUKPj4g ICAgIHNvZnR3YXJlIHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMg aGF2ZSBiZWVuIGNvbXBsZXRlZC4KPj4gICAgICJXcml0ZSAwIiB3aWxsIGNhdXNlIG5vdGhpbmcu Cj4+Cj4+ICAzKSBzdXBlcnZpc29yIGludGVycnVwdCByZWdpc3RlciAoc2lwICYgc2llKTpUTEJJ IGZpbmlzaCBpbnRlcnJ1cHQKPj4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRv IHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVycy4KPj4gICAgIFdoZW4gYWxsIHNmZW5jZS52 bWEgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBhbmQgc3N0YXR1czpUTEJJQyBoYXMgYmVlbgo+PiAg ICAgdHJpZ2dlcmVkLCBoYXJ0IHdpbGwgcmVjZWl2ZSBhIFRMQkkgZmluaXNoIGludGVycnVwdC4g SnVzdCBsaWtlIHRpbWVyLAo+PiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFsIGludGVycnVwdCdz IGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+Pgo+PiBGYWtlIGNvZGU6Cj4+Cj4+IGZsdXNoX3Rs Yl9wYWdlKHZtYSwgYWRkcikgewo+PiAgICAgYXNpZCA9IGNwdV9hc2lkKHZtYS0+dm1fbW0pOwo+ PiAgICAgcHBuID0gUEZOX0RPV04odm1hLT52bV9tbS0+cGdkKTsKPj4KPj4gICAgIHNmZW5jZS52 bWEgKGFkZHIsIDF8UFBOX09GRlNFVChwcG4pfGFzaWQpOyAvLzEuIHN0YXJ0IHJlcXVlc3QKPj4K Pj4gICAgIHdoaWxlKHNzdGF0dXM6VExCSSkgaWYgKHRpbWVfb3V0KCkgPiAxbXMpIGJyZWFrOyAv LzIuIGxvb3AgY2hlY2sKPj4KPj4gICAgIHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPj4gICAgICAg ICAuLi4KPj4gICAgICAgICBzZXQgc3N0YXR1czpUTEJJQzsKPj4gICAgICAgICB3YWl0X1RMQklf ZmluaXNoX2ludGVycnVwdCgpOyAvLzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+PiAgICAgfQo+ PiB9Cj4+Cj4+IEhlcmUgd2UgZ2l2ZSAyIGxldmVsIGNoZWNrOgo+PiAgMSkgbG9vcCBjaGVjayBz c3RhdHVzOlRMQkksIENQVSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4+ICAyKSBzZXQgc3N0 YXR1czpUTEJJQyBhbmQgd2FpdCBmb3IgaXJxLCBDUFUgc2NoZWR1bGUgb3V0IGZvciBvdGhlciB0 YXNrLgo+Pgo+PiBBQ0UtRFZNIEV4YW1wbGUKPj4gPT09PT09PT09PT09PT09Cj4+Cj4+IEhvbmVz dGx5LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8gaW50 ZXJjb25uZWN0cyIKPj4gYW5kICJBU1lOQyBTRkVOQ0UuVk1BIiBjb3VsZCBiZSBpbXBsZW1lbnRl ZCBieSBBQ0UtRFZNIHByb3RvY29sIHJlZiBbMl0uCj4+Cj4+IFRoZXJlIGFyZSAzIHR5cGVzIG9m IHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4+Cj4+ICAtIERWTSBvcGVyYXRpb24KPj4gICAgU2VuZCBh bGwgaW5mb3JtYXRpb24gdG8gdGhlIGludGVyY29ubmVjdCwgaW5jbHVkaW5nIGFkZHIsIGFzaWQs Cj4+ICAgIFMxLlBHRC5QUE4sIHZtaWQsIFMyLlBHRC5QUE4uCj4+Cj4+ICAtIERWTSBzeW5jaHJv bml6YXRpb24KPj4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIGNv bXBsZXRlZC4gSWYgbm90LCBpdCB3aWxsIHVzZQo+PiAgICBzdGF0ZSBtYWNoaW5lIHRvIHdhaXQg RFZNIGNvbXBsZXRlIHJlcXVlc3RzLgo+Pgo+PiAgLSBEVk0gY29tcGxldGUKPj4gICAgUmV0dXJu IHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywgZWc6IElPTU1VLiBJZiBoYXJ0IGhhcyByZWNl aXZlZCBhbGwKPj4gICAgRFZNIGNvbXBsZXRlcyB3aGljaCBhcmUgdHJpZ2dlcmVkIGJ5IHNmZW5j ZS52bWEgaW5zdHJ1Y3Rpb25zIGFuZAo+PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0 LCBhIFRMQkkgZmluaXNoIGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCj4+Cj4+IChBY3R1YWxseSwg d2UgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBmdW5jdGlvbnMgc3RyaWN0bHkK Pj4gIGFjY29yZGluZyB0byB0aGUgQUNFIHNwZWNpZmljYXRpb24gOlAgKQo+Pgo+PiAgMTogaHR0 cHM6Ly93d3cubGludXhwbHVtYmVyc2NvbmYub3JnL2V2ZW50LzQvY29udHJpYnV0aW9ucy8zMDcv Cj4+ICAyOiBBTUJBIEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmli dXRlZCBWaXJ0dWFsIE1lbW9yeQo+PiAgICAgVHJhbnNhY3Rpb25zIgo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPj4gUmV2aWV3ZWQtYnk6IExpIEZlaXRl bmcgPGZlaXRlbmdfbGlAYy1za3kuY29tPgo+PiAtLS0KPj4gIHNyYy9oeXBlcnZpc29yLnRleCB8 ICA0MyArKysrKysrKy0tLS0tLS0KPj4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgMiBmaWxl cyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvaHlwZXJ2aXNvci50ZXggYi9zcmMvaHlwZXJ2aXNvci50ZXgKPj4gaW5kZXgg NDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPj4gLS0tIGEvc3JjL2h5cGVydmlzb3IudGV4Cj4+ICsr KyBiL3NyYy9oeXBlcnZpc29yLnRleAo+PiBAQCAtMTA5NCwxNSArMTA5NCwxNSBAQCBUaGUgaHlw ZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3IHByaXZpbGVnZWQgZmVuY2UgaW5zdHJ1Y3Rp b25zLgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtvcGNvZGV9IFxcCj4+ICBcaGxpbmUKPj4gIDcg JiA1ICYgNSAmIDMgJiA1ICYgNyBcXAo+PiAtSEZFTkNFLkdWTUEgJiB2bWlkICYgZ2FkZHIgJiBQ UklWICYgMCAmIFNZU1RFTSBcXAo+PiAtSEZFTkNFLlZWTUEgJiBhc2lkICYgdmFkZHIgJiBQUklW ICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLkdWTUEgJiBtb2RlOnBwbjp2bWlkICYgZ2FkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLlZWTUEgJiBtb2RlOnBwbjphc2lkICYg dmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+ICBUaGUgaHlwZXJ2aXNvciBtZW1vcnktbWFuYWdlbWVudCBmZW5jZSBpbnN0 cnVjdGlvbnMsIEhGRU5DRS5HVk1BIGFuZAo+PiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5 IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1zdGF0dXN9LlRWTT0wLCBvciBpbiBNLW1vZGUKPj4gIChp cnJlc3BlY3RpdmUgb2Yge1x0dCBtc3RhdHVzfS5UVk0pLgo+PiAtVGhlc2UgaW5zdHJ1Y3Rpb25z IHBlcmZvcm0gYSBmdW5jdGlvbiBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPj4gK1RoZXNlIGluc3Ry dWN0aW9ucyBwZXJmb3JtIGEgZnVuY3Rpb24gc2ltaWxhciB0byBTRkVOQ0UuVk1BIChicm9hZGNh c3QvbG9jYWwpCj4+ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBs eWluZyB0byB0aGUgZ3Vlc3QtcGh5c2ljYWwKPj4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3Ry dWN0dXJlcyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfSAoSEZFTkNFLkdWTUEpCj4+ICBv ciB0aGUgVlMtbGV2ZWwgbWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRyb2xs ZWQgYnkgQ1NSIHtcdHQgdnNhdHB9Cj4+IEBAIC0xMTM2LDExICsxMTM2LDEwIEBAIEFuIEhGRU5D RS5WVk1BIGluc3RydWN0aW9uIGFwcGxpZXMgb25seSB0byBhIHNpbmdsZSB2aXJ0dWFsIG1hY2hp bmUsIGlkZW50aWZpZWQKPj4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9LlZNSUQgd2hl biBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPj4gIFxlbmR7Y29tbWVudGFyeX0KPj4KPj4gLVdoZW4g e1xlbSByczJ9JFxuZXEke1x0dCB4MH0sIGJpdHMgWExFTi0xOkFTSURNQVggb2YgdGhlIHZhbHVl IGhlbGQgaW4ge1xlbQo+PiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUgYW5kIGlnbm9yZWQKPj4gLWJ5IGN1cnJlbnQgaW1w bGVtZW50YXRpb25zLgo+PiAtRnVydGhlcm1vcmUsIGlmIEFTSURMRU5+JDwkfkFTSURNQVgsIHRo ZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUgYml0cwo+PiAtQVNJRE1BWC0xOkFTSURMRU4g b2YgdGhlIHZhbHVlIGhlbGQgaW4ge1xlbSByczJ9Lgo+PiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7 XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLCBwcG4sIGFzaWQuCj4+ ICsxKSBtb2RlIGNvbnRyb2wgSEZFTkNFLlZWTUEgYnJvYWRjYXN0IG9yIG5vdC4KPj4gKzIpIHBw biBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2Uu Cj4+ICszKSBhc2lkIGlzIHRoZSBpZGVudGlmaWVyIG9mIHByb2Nlc3MgaW4gdmlydHVhbCBtYWNo aW5lLgo+Pgo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9u cyBvZiBIRkVOQ0UuVlZNQSBjYW4gaWdub3JlIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW4K Pj4gQEAgLTExNjgsMTEgKzExNjcsMTAgQEAgcGh5c2ljYWwgYWRkcmVzc2VzIGluIFBNUCBhZGRy ZXNzIHJlZ2lzdGVycyAoU2VjdGlvbn5ccmVme3NlYzpwbXB9KSBhbmQgaW4gcGFnZQo+PiAgdGFi bGUgZW50cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LCBhbmR+ XHJlZntzZWM6c3Y0OH0pLgo+PiAgXGVuZHtjb21tZW50YXJ5fQo+Pgo+PiAtV2hlbiB7XGVtIHJz Mn0kXG5lcSR7XHR0IHgwfSwgYml0cyBYTEVOLTE6Vk1JRE1BWCBvZiB0aGUgdmFsdWUgaGVsZCBp biB7XGVtCj4+IC1yczJ9IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hvdWxkIGJl IHplcm9lZCBieSBzb2Z0d2FyZSBhbmQgaWdub3JlZAo+PiAtYnkgY3VycmVudCBpbXBsZW1lbnRh dGlvbnMuCj4+IC1GdXJ0aGVybW9yZSwgaWYgVk1JRExFTn4kPCR+Vk1JRE1BWCwgdGhlIGltcGxl bWVudGF0aW9uIHNoYWxsIGlnbm9yZSBiaXRzCj4+IC1WTUlETUFYLTE6Vk1JRExFTiBvZiB0aGUg dmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4+ICtXaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9 LCBiaXRzIGNvbnRhaW4gMyBpbmZvcm1hdGlvbnM6IG1vZGUsIHZtaWQsIHBwbi4KPj4gKzEpIG1v ZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+PiArMikgcHBuIGlzIHRo ZSByb290IHBhZ2UgdGFsYmUncyBQUE4gb2YgdGhlIHZtaWQgYWRkcmVzcyBzcGFjZS4KPj4gKzMp IHZtaWQgaXMgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBtYWNoaW5lLgo+Pgo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBj YW4gaWdub3JlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGluCj4+IEBAIC0xNTY3LDIxICsx NTY1LDIyIEBAIHJlZ2lzdGVyLgo+PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVu Y2VzfQo+Pgo+PiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlz IGFmZmVjdGVkIGJ5IHRoZSBjdXJyZW50Cj4+IC12aXJ0dWFsaXphdGlvbiBtb2RlIFYuICBXaGVu IFY9MCwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCBpcyBhbiBIUy1sZXZlbAo+PiAtdmly dHVhbCBhZGRyZXNzLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYW4gSFMtbGV2ZWwgQVNJRC4K Pj4gK3ZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgcnMxIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsCj4+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTi4KPj4gIFRoZSBpbnN0 cnVjdGlvbiBvcmRlcnMgc3RvcmVzIG9ubHkgdG8gSFMtbGV2ZWwgYWRkcmVzcy10cmFuc2xhdGlv biBzdHJ1Y3R1cmVzCj4+ICB3aXRoIHN1YnNlcXVlbnQgSFMtbGV2ZWwgYWRkcmVzcyB0cmFuc2xh dGlvbnMuCj4+Cj4+IC1XaGVuIFY9MSwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCB0byBT RkVOQ0UuVk1BIGlzIGEgZ3Vlc3QgdmlydHVhbAo+PiAtYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJl bnQgdmlydHVhbCBtYWNoaW5lLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYSBWUy1sZXZlbAo+ PiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5lLgo+PiArV2hlbiBWPTEs IHRoZSByczEgYXJndW1lbnQgdG8gU0ZFTkNFLlZNQSBpcyBhIGd1ZXN0IHZpcnR1YWwKPj4gK2Fk ZHJlc3Mgd2l0aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSByczIgYXJn dW1lbnQgaXMgYSBWUy1sZXZlbAo+PiArQVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHdp dGhpbiB0aGUgY3VycmVudCB2aXJ0dWFsIG1hY2hpbmUuCj4+ICBUaGUgY3VycmVudCB2aXJ0dWFs IG1hY2hpbmUgaXMgaWRlbnRpZmllZCBieSB0aGUgVk1JRCBmaWVsZCBvZiBDU1Ige1x0dCBoZ2F0 cH0sCj4+IC1hbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHRo ZSBjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQKPj4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4+ ICthbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gY2FuIGJl IGNvbnNpZGVyZWQgdG8gYmUgdGhlCj4+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJv b3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoIHRoZSBWUy1sZXZlbCBBU0lEIGFuZAo+PiArcm9vdCBw YWdlIHRhYmxlJ3MgUFBOLgo+PiAgVGhlIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24gb3JkZXJzIHN0 b3JlcyBvbmx5IHRvIHRoZSBWUy1sZXZlbAo+PiAgYWRkcmVzcy10cmFuc2xhdGlvbiBzdHJ1Y3R1 cmVzIHdpdGggc3Vic2VxdWVudCBWUy1sZXZlbCBhZGRyZXNzIHRyYW5zbGF0aW9ucwo+PiAtZm9y IHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdhdHB9LlZN SUQgaXMgdGhlIHNhbWUgYXMKPj4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4+ICtm b3IgdGhlIHNhbWUgdmlydHVhbCBtYWNoaW5lLCBpLmUuLCBvbmx5IHdoZW4ge1x0dCBoZ2F0cH0u Vk1JRCBhbmQge1xcdHQgaGdhdHB9LlBQTiBpcwo+PiArdGhlIHNhbWUgYXMgd2hlbiB0aGUgU0ZF TkNFLlZNQSBleGVjdXRlZC4KPj4KPj4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rpb25zIEhGRU5DRS5H Vk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlIGFkZGl0aW9uYWwKPj4gIG1lbW9yeS1tYW5hZ2Vt ZW50IGZlbmNlcyB0byBjb21wbGVtZW50IFNGRU5DRS5WTUEuCj4+IGRpZmYgLS1naXQgYS9zcmMv c3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPj4gaW5kZXggYmEzY2VkNS4uMjg3 N2I3YSAxMDA2NDQKPj4gLS0tIGEvc3JjL3N1cGVydmlzb3IudGV4Cj4+ICsrKyBiL3NyYy9zdXBl cnZpc29yLnRleAo+PiBAQCAtNDcsMTAgKzQ3LDEyIEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9m IHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxiZWdpbntjZW50 ZXJ9Cj4+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gIFxzY2FsZWJveHswLjk1fXsK Pj4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2NjV2NjY2NXY2N9Cj4+ICtcYmVnaW57dGFidWxhcn17 Y2NjV2NjY2NjV2NjY2NXY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7MzF9ICYKPj4gLVxpbnN0Yml0 cmFuZ2V7MzB9ezIwfSAmCj4+ICtcaW5zdGJpdHszMH0gJgo+PiArXGluc3RiaXR7Mjl9ICYKPj4g K1xpbnN0Yml0cmFuZ2V7Mjh9ezIwfSAmCj4+ICBcaW5zdGJpdHsxOX0gJgo+PiAgXGluc3RiaXR7 MTh9ICYKPj4gIFxpbnN0Yml0ezE3fSAmCj4+IEBAIC02Niw2ICs2OCw4IEBAIHJlZ2lzdGVyIGtl ZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4g IFxpbnN0Yml0ezB9IFxcCj4+ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8 fXtUTEJJQ30gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29s dW1uezF9e2N8fXtNWFJ9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1VNfSAmCj4+IEBAIC04 Miw3ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJy ZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9Cj4+ICBc XAo+PiAgXGhsaW5lCj4+IC0xICYgMTEgJiAxICYgMSAmIDEgJiAyICYgMiAmIDQgJiAxICYgMSAm IDEgJiAxICYgMyAmIDEgJiAxIFxcCj4+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYgMSAmIDIg JiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn19 Cj4+ICBcZW5ke2NlbnRlcn0KPj4gIH0KPj4gQEAgLTk1LDEwICs5OSwxMiBAQCByZWdpc3RlciBr ZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUuCj4+ ICB7XGZvb3Rub3Rlc2l6ZQo+PiAgXGJlZ2lue2NlbnRlcn0KPj4gIFxzZXRsZW5ndGh7XHRhYmNv bHNlcH17NHB0fQo+PiAtXGJlZ2lue3RhYnVsYXJ9e2NNRlNjY2NjfQo+PiArXGJlZ2lue3RhYnVs YXJ9e2NjY01GU2NjY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7U1hMRU4tMX0gJgo+PiAtXGluc3Ri aXRyYW5nZXtTWExFTi0yfXszNH0gJgo+PiArXGluc3RiaXR7U1hMRU4tMn0gJgo+PiArXGluc3Ri aXR7U1hMRU4tM30gJgo+PiArXGluc3RiaXRyYW5nZXtTWExFTi00fXszNH0gJgo+PiAgXGluc3Ri aXRyYW5nZXszM317MzJ9ICYKPj4gIFxpbnN0Yml0cmFuZ2V7MzF9ezIwfSAmCj4+ICBcaW5zdGJp dHsxOX0gJgo+PiBAQCAtMTA3LDYgKzExMyw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRo ZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gICBcXAo+PiAgXGhsaW5l Cj4+ICBcbXVsdGljb2x1bW57MX17fGN8fXtTRH0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 VExCSX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPj4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17VVhMWzE6MF19ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9ICYKPj4gQEAgLTExNSw3ICsxMjMsNyBAQCByZWdp c3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3Rh dGUuCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICAgXFwKPj4gIFxobGluZQo+ PiAtMSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gKzEgJiAxICYgMSAm IFNYTEVOLTM3ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPj4gIFxcCj4+IEBAIC0xNTIsNiArMTYwLDE3 IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJh dGluZyBzdGF0ZS4KPj4gIFxsYWJlbHtzc3RhdHVzcmVnfQo+PiAgXGVuZHtmaWd1cmUqfQo+Pgo+ PiArVGhlIFRMQkkgKHJlYWQtb25seSkgYml0IGluZGljYXRlcyB0aGF0IGFueSBhc3luYyBzZmVu Y2Uudm1hIG9wZXJhdGlvbnMgYXJlCj4+ICtzdGlsbCBwZW5kZWQgb24gdGhlIGhhcnQuIFRoZSB2 YWx1ZTowIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2ZlbmNlLnZtYQo+PiArb3BlcmF0aW9ucyBw ZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHNmZW5jZS52bWEg b3BlcmF0aW9ucwo+PiArcGVuZGluZyBvbiB0aGUgaGFydC4KPj4gKwo+PiArV2hlbiB0aGUgc3N0 YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAxLCBpdCB0cmlnZ2VycyB0aGUgaGFyZHdhcmUgdG8g Y2hlY2sgaWYKPj4gK3RoZXJlIGFyZSBhbnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWlu ZyBwZW5kZWQuIFdoZW4gYWxsIG9wZXJhdGlvbnMgYXJlCj4+ICtmaW5pc2hlZCwgYSBUTEIgSW52 YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkCj4+ICsoc2VlIFNlY3Rp b25+XHJlZntzaXByZWd9KS4gV2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAw LCBpdCB3aWxsCj4+ICtjYXVzZSBub3RoaW5nLiBSZWFkaW5nIHNzdGF0dXM6VExCSUMgYml0IHdp bGwgYWxhd2F5cyByZXR1cm4gMC4KPj4gKwo+PiAgVGhlIFNQUCBiaXQgaW5kaWNhdGVzIHRoZSBw cml2aWxlZ2UgbGV2ZWwgYXQgd2hpY2ggYSBoYXJ0IHdhcyBleGVjdXRpbmcgYmVmb3JlCj4+ICBl bnRlcmluZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNl dCB0byAwIGlmIHRoZSB0cmFwCj4+ICBvcmlnaW5hdGVkIGZyb20gdXNlciBtb2RlLCBvciAxIG90 aGVyd2lzZS4gIFdoZW4gYW4gU1JFVCBpbnN0cnVjdGlvbgo+PiBAQCAtMzI5LDggKzM0OCwxMCBA QCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBjb250YWluaW5nIGludGVycnVwdCBlbmFi bGUgYml0cy4KPj4gIHtcZm9vdG5vdGVzaXplCj4+ICBcYmVnaW57Y2VudGVyfQo+PiAgXHNldGxl bmd0aHtcdGFiY29sc2VwfXs0cHR9Cj4+IC1cYmVnaW57dGFidWxhcn17S2NGY0ZjY30KPj4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPj4gK1xiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNGY2N9 Cj4+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4+ICtcaW5zdGJpdHsxM30gJgo+PiAr XGluc3RiaXRyYW5nZXsxMn17MTB9ICYKPj4gIFxpbnN0Yml0ezl9ICYKPj4gIFxpbnN0Yml0cmFu Z2V7OH17Nn0gJgo+PiAgXGluc3RiaXR7NX0gJgo+PiBAQCAtMzM5LDYgKzM2MCw4IEBAIFNYTEVO LWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcgaW50ZXJydXB0IGVuYWJsZSBiaXRz Lgo+PiAgXGluc3RiaXR7MH0gXFwKPj4gIFxobGluZQo+PiAgXG11bHRpY29sdW1uezF9e3xjfH17 XHdwcml9ICYKPj4gK1xtdWx0aWNvbHVtbnsxfXtjfH17U1RMQklQfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17fGN8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTRUlQfSAmCj4+ICBc bXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9 ICYKPj4gQEAgLTM0Niw3ICszNjksNyBAQCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBj b250YWluaW5nIGludGVycnVwdCBlbmFibGUgYml0cy4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17 U1NJUH0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGluZQo+PiAt U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYgMSAmIDMg JiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxlbmR7Y2Vu dGVyfQo+PiAgfQo+PiBAQCAtMzU5LDggKzM4MiwxMCBAQCBTWExFTi0xMCAmIDEgJiAzICYgMSAm IDMgJiAxICYgMSBcXAo+PiAge1xmb290bm90ZXNpemUKPj4gIFxiZWdpbntjZW50ZXJ9Cj4+ICBc c2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ PiAtXGluc3RiaXRyYW5nZXtTWExFTi0xfXsxMH0gJgo+PiArXGJlZ2lue3RhYnVsYXJ9e0tjRmNG Y0ZjY30KPj4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPj4gK1xpbnN0Yml0ezEzfSAm Cj4+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+PiAgXGluc3RiaXR7OX0gJgo+PiAgXGluc3Ri aXRyYW5nZXs4fXs2fSAmCj4+ICBcaW5zdGJpdHs1fSAmCj4+IEBAIC0zNjksNiArMzk0LDggQEAg U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxpbnN0Yml0ezB9IFxcCj4+ ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17Y3x9e1NUTEJJRX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17XHdwcml9ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3By aX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTVElFfSAmCj4+IEBAIC0zNzYsNyArNDAzLDcg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxtdWx0aWNvbHVtbnsx fXtjfH17U1NJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGlu ZQo+PiAtU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYg MSAmIDMgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxl bmR7Y2VudGVyfQo+PiAgfQo+PiBAQCAtNDEwLDYgKzQzNywxMiBAQCB3aGVuIHRoZSBTRUlFIGJp dCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzIGNsZWFyLiAgVGhlIGltcGxlbWVudGF0aW9u Cj4+ICBzaG91bGQgcHJvdmlkZSBmYWNpbGl0aWVzIHRvIG1hc2ssIHVubWFzaywgYW5kIHF1ZXJ5 IHRoZSBjYXVzZSBvZiBleHRlcm5hbAo+PiAgaW50ZXJydXB0cy4KPj4KPj4gK0Egc3VwZXJ2aXNv ci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IGlzIHBlbmRpbmcgaWYgdGhl IFNUTEJJUCBiaXQKPj4gK2luIHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2 aXNvci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2gKPj4gK2ludGVycnVwdHMgYXJlIGRpc2Fi bGVkIHdoZW4gdGhlIFNUTEJJRSBiaXQgaW4gdGhlIHtcdHQgc2llfSByZWdpc3RlciBpcyBjbGVh ci4KPj4gK1doZW4gaGFydCB0bGIgaW52YWxpZGF0ZSBvcGVyYXRpb25zIGFyZSBmaW5pc2hlZCwg aGFyZHdhcmUgd2lsbCBjaGFuZ2Ugc3N0YXR1czpUTEJJCj4+ICtiaXQgZnJvbSAxIHRvIDAgYW5k IHRyaWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPj4gKwo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0gYW5kIHtcdHQKPj4gIG1pZX0gcmVnaXN0ZXJzLiAg UmVhZGluZyBhbnkgZmllbGQsIG9yIHdyaXRpbmcgYW55IHdyaXRhYmxlIGZpZWxkLCBvZiB7XHR0 Cj4+IEBAIC01OTgsNyArNjMxLDkgQEAgc28gaXMgb25seSBndWFyYW50ZWVkIHRvIGhvbGQgc3Vw cG9ydGVkIGV4Y2VwdGlvbiBjb2Rlcy4KPj4gICAgMSAgICAgICAgICYgNSAgICAgICAgICAgICAg ICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPj4gICAgMSAgICAgICAgICYgNi0tOCAg ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAgICAgICAgICYgOSAgICAgICAg ICAgICAgICYgU3VwZXJ2aXNvciBleHRlcm5hbCBpbnRlcnJ1cHQgXFwKPj4gLSAgMSAgICAgICAg ICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYg MTAtLTExICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYgMTIg ICAgICAgICAgICAgICYgU3VwZXJ2aXNvciBUTEJJIGZpbmlzaCBpbnRlcnJ1cHQgXFwKPj4gKyAg MSAgICAgICAgICYgMTMtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAg ICAgICAgICYgJFxnZSQxNiAgICAgICAgICYge1xlbSBBdmFpbGFibGUgZm9yIHBsYXRmb3JtIHVz ZX0gXFwgXGhsaW5lCj4+ICAgIDAgICAgICAgICAmIDAgICAgICAgICAgICAgICAmIEluc3RydWN0 aW9uIGFkZHJlc3MgbWlzYWxpZ25lZCBcXAo+PiAgICAwICAgICAgICAgJiAxICAgICAgICAgICAg ICAgJiBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgXFwKPj4gQEAgLTg4NCw3ICs5MTksNyBAQCBw cm92aWRlZC4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17b3Bjb2RlfSBcXAo+PiAgXGhsaW5lCj4+ ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPj4gLVNGRU5DRS5WTUEgJiBhc2lkICYgdmFkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArU0ZFTkNFLlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2 YWRkciAmIExPQ0FMICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+IEBAIC04OTksMjEgKzkzNCw3MCBAQCBmcm9tIHRoYXQgaGFydCB0byB0aGUg bWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzLgo+PiAgRnVydGhlciBkZXRhaWxzIG9u IHRoZSBiZWhhdmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+PiAgZGVzY3JpYmVkIGluIFNl Y3Rpb25+XHJlZnt2aXJ0LWNvbnRyb2x9IGFuZCBTZWN0aW9uflxyZWZ7cG1wLXZtZW19Lgo+Pgo+ PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLCB3aGljaCBtZWFucwo+PiArdGhhdCB0aGUgVExCIG9wZXJhdGlvbiBpcyBub3Qg Z3VhcmFudGVlZCB0byBjb21wbGV0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiByZXRpcmVzLgo+PiAr U29mdHdhcmUgbmVlZCBjaGVjayBzc3RhdHVzOlRMQkkgdG8gZGV0ZXJtaW5lIGFsbCBUTEIgb3Bl cmF0aW9ucyBjb21wbGV0ZS4KPj4gK1RoZSBzc3RhdHVzOlRMQkkgZGVzY3JpYmVkIGluIFNlY3Rp b25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZSBjaGFuZ2UKPj4gK3NzdGF0dXM6VExCSSBi aXQgZnJvbSAxIHRvIDAsIHRoZSBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwg YmUKPj4gK3RyaWdnZXJlZC4KPj4gKwo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+IC1UaGUgU0ZF TkNFLlZNQSBpcyB1c2VkIHRvIGZsdXNoIGFueSBsb2NhbCBoYXJkd2FyZSBjYWNoZXMgcmVsYXRl ZCB0bwo+PiArVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3Rl IGhhcmR3YXJlIGNhY2hlcyByZWxhdGVkIHRvCj4+ICBhZGRyZXNzIHRyYW5zbGF0aW9uLiAgSXQg aXMgc3BlY2lmaWVkIGFzIGEgZmVuY2UgcmF0aGVyIHRoYW4gYSBUTEIKPj4gIGZsdXNoIHRvIHBy b3ZpZGUgY2xlYW5lciBzZW1hbnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoIGluc3RydWN0aW9u cwo+PiAgYXJlIGFmZmVjdGVkIGJ5IHRoZSBmbHVzaCBvcGVyYXRpb24gYW5kIHRvIHN1cHBvcnQg YSB3aWRlciB2YXJpZXR5IG9mCj4+ICBkeW5hbWljIGNhY2hpbmcgc3RydWN0dXJlcyBhbmQgbWVt b3J5LW1hbmFnZW1lbnQgc2NoZW1lcy4gIFNGRU5DRS5WTUEKPj4gIGlzIGFsc28gdXNlZCBieSBo aWdoZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4+IC13cml0 ZXMgYW5kIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLgo+PiArd3JpdGVzIGFuZCB0 aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4gVGhlcmUgaXMgYSBtb2RlIGJpdCB0byBk ZXRlcm1pbmUKPj4gK3NmZW5jZS52bWEgd291bGQgYnJvYWRjYXN0IG9uIGludGVyY29ubmVjdCBv ciBub3QuCj4+ICBcZW5ke2NvbW1lbnRhcnl9Cj4+Cj4+IC1TRkVOQ0UuVk1BIG9yZGVycyBvbmx5 IHRoZSBsb2NhbCBoYXJ0J3MgaW1wbGljaXQgcmVmZXJlbmNlcyB0byB0aGUKPj4gLW1lbW9yeS1t YW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xm b290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17Y0B7fUVA e31LfQo+PiArXGluc3RiaXR7MzF9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7MzB9ezl9ICYKPj4gK1xp bnN0Yml0cmFuZ2V7OH17MH0gXFwKPj4gK1xobGluZQo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 e1x0dCBNT0RFfX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFn ZSB0YWJsZSl9fSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IEFTSUR9fSBcXAo+PiAr XGhsaW5lCj4+ICsxICYgMjIgJiA5IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRl cn0KPj4gK30KPj4gK1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1h IHJzMiBmb3JtYXQufQo+PiArXGxhYmVse3J2MzJzYXRwfQo+PiArXGVuZHtmaWd1cmV9Cj4+ICsK Pj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xmb290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50 ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17QHt9U0B7fVRAe31VfQo+PiArXGluc3RiaXRyYW5nZXs2 M317NjB9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7NTl9ezE2fSAmCj4+ICtcaW5zdGJpdHJhbmdlezE1 fXswfSBcXAo+PiArXGhsaW5lCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IFBQTiAocm9vdCBwYWdlIHRhYmxlKX19ICYK Pj4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e3tcdHQgQVNJRH19IFxcCj4+ICtcaGxpbmUKPj4gKzQg JiA0NCAmIDE2IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRlcn0KPj4gK30KPj4g K1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQs IGZvciBNT0RFIHZhbHVlcywgb25seSBoaWdoZXN0IGJpdDo2MyBpcwo+PiArdmFsaWQgYW5kIG90 aGVycyBhcmUgcmVzZXJ2ZWQufQo+PiArXGxhYmVse3J2NjRzYXRwfQo+PiArXGVuZHtmaWd1cmV9 Cj4+Cj4+ICBcYmVnaW57Y29tbWVudGFyeX0KPj4gLUNvbnNlcXVlbnRseSwgb3RoZXIgaGFydHMg bXVzdCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICtUaGUgbW9kZSdzIGhpZ2hl c3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoIDE6YnJvYWRjYXN0 IG9yIDA6bG9jYWwuCj4+ICtJZiBvbmx5IGhhdmUgbW9kZTpsb2NhbCwgb3RoZXIgaGFydHMgbXVz dCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICBtZW1vcnktbWFuYWdlbWVudCBk YXRhIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgo+PiAgT25lIGFwcHJvYWNoIGlzIHRv IHVzZSAxKQo+PiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBsb2NhbCB3cml0ZXMgYXJl IHZpc2libGUgZ2xvYmFsbHksIHRoZW4KPj4gQEAgLTkyOCw4ICsxMDEyLDE3IEBAIG1vZGlmaWVk IGZvciBhIHNpbmdsZSBhZGRyZXNzIG1hcHBpbmcgKGkuZS4sIG9uZSBwYWdlIG9yIHN1cGVycGFn ZSksIHtcZW0gcnMxfQo+PiAgY2FuIHNwZWNpZnkgYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRo YXQgbWFwcGluZyB0byBlZmZlY3QgYSB0cmFuc2xhdGlvbgo+PiAgZmVuY2UgZm9yIHRoYXQgbWFw cGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUKPj4g IHRyYW5zbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBoYXZlIG9ubHkgYmVlbiBtb2RpZmllZCBmb3Ig YSBzaW5nbGUgYWRkcmVzcy1zcGFjZQo+PiAtaWRlbnRpZmllciwge1xlbSByczJ9IGNhbiBzcGVj aWZ5IHRoZSBhZGRyZXNzIHNwYWNlLiAgVGhlIGJlaGF2aW9yIG9mCj4+IC1TRkVOQ0UuVk1BIGRl cGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4gK2lkZW50aWZp ZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBzcGFjZSB3aXRoIHtcdHQgc2F0 cH0gZm9ybWF0Cj4+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQ TiBpbmZvcm1hdGlvbi4KPj4gKwo+PiArXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICtXZSB1c2UgQVNJ RCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlIGFu ZCB0aGUgZm9ybWF0Cj4+ICtzdG9yZWQgaW4gcnMyIGlzIHNpbWlsYXIgd2l0aCB7XHR0IHNhdHB9 IGRlc2NyaWJlZCBpbiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+PiArQVNJRCBhcmUgdXNlZCBi eSBsb2NhbCBoYXJ0cyBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIG9mIHRoZSBhc2lkIGFyZSB1 c2VkIGJ5Cj4+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJT01NVS4KPj4gK1xl bmR7Y29tbWVudGFyeX0KPj4gKwo+PiArVGhlIGJlaGF2aW9yIG9mIFNGRU5DRS5WTUEgZGVwZW5k cyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcyBmb2xsb3dzOgo+Pgo+PiAgXGJlZ2lue2l0 ZW1pemV9Cj4+ICBcaXRlbSBJZiB7XGVtIHJzMX09e1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0 IHgwfSwgdGhlIGZlbmNlIG9yZGVycyBhbGwKPj4gQEAgLTkzOSwyMyArMTAzMiwxOCBAQCBTRkVO Q0UuVk1BIGRlcGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4g ICAgICAgIGFsbCByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdl IHRhYmxlcywgYnV0IG9ubHkKPj4gICAgICAgIGZvciB0aGUgYWRkcmVzcyBzcGFjZSBpZGVudGlm aWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAgICAgICAgQWNjZXNzZXMgdG8g e1xlbSBnbG9iYWx9IG1hcHBpbmdzIChzZWUgU2VjdGlvbn5ccmVme3NlYzp0cmFuc2xhdGlvbn0p Cj4+IC0gICAgICBhcmUgbm90IG9yZGVyZWQuCj4+ICsgICAgICBhcmUgbm90IG9yZGVyZWQuIFRo ZSBtb2RlIGZpZWxkIGluIHJzMiBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxvY2FsLgo+PiAg XGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwg dGhlIGZlbmNlIG9yZGVycwo+PiAgICAgICAgb25seSByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8g dGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nCj4+ICAgICAgICB0byB0aGUg dmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIGFsbCBhZGRyZXNzIHNwYWNlcy4KPj4g IFxpdGVtIElmIHtcZW0gcnMxfSRcbmVxJHtcdHQgeDB9IGFuZCB7XGVtIHJzMn0kXG5lcSR7XHR0 IHgwfSwgdGhlIGZlbmNlCj4+ICAgICAgICBvcmRlcnMgb25seSByZWFkcyBhbmQgd3JpdGVzIG1h ZGUgdG8gdGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeQo+PiAgICAgICAgY29ycmVzcG9uZGluZyB0 byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIHRoZSBhZGRyZXNzCj4+IC0g ICAgICBzcGFjZSBpZGVudGlmaWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAr ICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2VyIHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhl IG1vZGUgZmllbGQgaW4gcnMyCj4+ICsgICAgICBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxv Y2FsLgo+PiAgICAgICAgQWNjZXNzZXMgdG8gZ2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJl ZC4KPj4gIFxlbmR7aXRlbWl6ZX0KPj4KPj4gLVdoZW4ge1xlbSByczJ9JFxuZXEke1x0dCB4MH0s IGJpdHMgU1hMRU4tMTpBU0lETUFYIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0KPj4gLXJzMn0g YXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3 YXJlIGFuZCBpZ25vcmVkCj4+IC1ieSBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4gIEZ1cnRoZXJt b3JlLCBpZiBBU0lETEVOfiQ8JH5BU0lETUFYLCB0aGUKPj4gLWltcGxlbWVudGF0aW9uIHNoYWxs IGlnbm9yZSBiaXRzIEFTSURNQVgtMTpBU0lETEVOIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0K Pj4gLXJzMn0uCj4+IC0KPj4gIFxiZWdpbntjb21tZW50YXJ5fQo+PiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSBhbmQK Pj4gIHRoZSBBU0lEIHZhbHVlIGluIHtcZW0gcnMyfSBhbmQgYWx3YXlzIHBlcmZvcm0gYSBnbG9i YWwgZmVuY2UuCj4+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBzYW1lIFNG RU5DRS5WTUEgaW5zdHJ1Y3Rpb24gd2hpbGUgYSBkaWZmZXJlbnQgQVNJRCBpcyBsb2FkZWQKPj4g IGludG8ge1x0dCBzYXRwfSwgcHJvdmlkZWQgdGhlIG5leHQgdGltZSB7XHR0IHNhdHB9IGlzIGxv YWRlZCB3aXRoIHRoZSByZWN5Y2xlZAo+PiAgQVNJRCwgaXQgaXMgc2ltdWx0YW5lb3VzbHkgbG9h ZGVkIHdpdGggdGhlIG5ldyBwYWdlIHRhYmxlLgo+Pgo+PiAtXGl0ZW0gSWYgdGhlIGltcGxlbWVu dGF0aW9uIGRvZXMgbm90IHByb3ZpZGUgQVNJRHMsIG9yIHNvZnR3YXJlIGNob29zZXMgdG8KPj4g K1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzIGFuZCBQ UE5zLCBvciBzb2Z0d2FyZSBjaG9vc2VzIHRvCj4+ICBhbHdheXMgdXNlIEFTSUQgMCwgdGhlbiBh ZnRlciBldmVyeSB7XHR0IHNhdHB9IHdyaXRlLCBzb2Z0d2FyZSBzaG91bGQgZXhlY3V0ZQo+PiAg U0ZFTkNFLlZNQSB3aXRoIHtcZW0gcnMxfT17XHR0IHgwfS4gIEluIHRoZSBjb21tb24gY2FzZSB0 aGF0IG5vIGdsb2JhbAo+PiAgdHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSBy czJ9IHNob3VsZCBiZSBzZXQgdG8gYSByZWdpc3RlciBvdGhlciB0aGFuCj4+IEBAIC0xMDAzLDEz ICsxMDkxLDE0IEBAIG5vdCBmbHVzaGVkLgo+Pgo+PiAgXGl0ZW0gSWYgc29mdHdhcmUgbW9kaWZp ZXMgYSBub24tbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlIFNGRU5DRS5WTUEgd2l0aAo+PiAg e1xlbSByczF9PXtcdHQgeDB9LiAgSWYgYW55IFBURSBhbG9uZyB0aGUgdHJhdmVyc2FsIHBhdGgg aGFkIGl0cyBHIGJpdCBzZXQsCj4+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3IKPj4gLXdoaWNoIHRo ZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3tcZW0gcnMyfSBtdXN0IGJlIHtc dHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lEIGFu ZAo+PiArcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gaXMg YmVpbmcgbW9kaWZpZWQuCj4+Cj4+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIGxlYWYg UFRFLCBpdCBzaG91bGQgZXhlY3V0ZSBTRkVOQ0UuVk1BIHdpdGgge1xlbQo+PiAgcnMxfSBzZXQg dG8gYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlLiAgSWYgYW55IFBURSBhbG9uZyB0 aGUgdHJhdmVyc2FsCj4+ICBwYXRoIGhhZCBpdHMgRyBiaXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBi ZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLCB7XGVtIHJzMn0KPj4gLXNob3VsZCBiZSBzZXQgdG8gdGhl IEFTSUQgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3No b3VsZCBiZSBzZXQgdG8gdGhlIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBmb3Igd2hp Y2ggdGhlIHRyYW5zbGF0aW9uCj4+ICtpcyBiZWluZyBtb2RpZmllZC4KPj4KPj4gIFxpdGVtIEZv ciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhIGxl YWYgUFRFIGFuZAo+PiAgY2hhbmdpbmcgYW4gaW52YWxpZCBQVEUgdG8gYSB2YWxpZCBsZWFmLCBz b2Z0d2FyZSBtYXkgY2hvb3NlIHRvIGV4ZWN1dGUKPj4gLS0KPj4gMi43LjQKPj4KPj4KPj4gLT0t PS09LT0tPS09LT0tPS09LT0tPS0KPj4gTGlua3M6IFlvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBz ZW50IHRvIHRoaXMgZ3JvdXAuCj4+Cj4+IFZpZXcvUmVwbHkgT25saW5lICgjODEwKTogaHR0cHM6 Ly9saXN0cy5yaXNjdi5vcmcvZy90ZWNoLXByaXZpbGVnZWQvbWVzc2FnZS84MTAKPj4gTXV0ZSBU aGlzIFRvcGljOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9tdC8zNDE5ODk4Ni8xNjc3MjczCj4+ IEdyb3VwIE93bmVyOiB0ZWNoLXByaXZpbGVnZWQrb3duZXJAbGlzdHMucmlzY3Yub3JnCj4+IFVu c3Vic2NyaWJlOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9nL3RlY2gtcHJpdmlsZWdlZC91bnN1 YiAgW2FuZHJld0BzaWZpdmUuY29tXQo+PiAtPS09LT0tPS09LT0tPS09LT0tPS09LQo+PgoKCi0t IApCZXN0IFJlZ2FyZHMKIEd1byBSZW4KCk1MOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1jc2t5LwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5F3BC4CEC4 for ; Fri, 20 Sep 2019 00:13:21 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9ED87206B6 for ; Fri, 20 Sep 2019 00:13:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="ARio8/iP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9ED87206B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 5EDB4CB7; Fri, 20 Sep 2019 00:13:21 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 678C5CB1 for ; Fri, 20 Sep 2019 00:13:20 +0000 (UTC) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 54683F8 for ; Fri, 20 Sep 2019 00:13:18 +0000 (UTC) Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id BB24B2196E for ; Fri, 20 Sep 2019 00:13:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938398; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=ARio8/iPTeDTzHJev/ZtCVsx/Sc8QM769WOnao31YkjCZ7ky53P5K9d/FugFi8NPE XEyONzCfi2gcO7kubI0Q2pyvtJfUyKQMfHz7e/3PeM2ql/6w+gGllHKRwZvRuNmyRS TibBLoHEa9eKLPHxpVgcsVpPOLHACRmbgFfjlyCU= Received: by mail-wr1-f50.google.com with SMTP id q17so4912336wrx.10 for ; Thu, 19 Sep 2019 17:13:17 -0700 (PDT) X-Gm-Message-State: APjAAAVxDuzj6EoqYF88DcWALXHxp0dH5Wi4WDUM9ISacWVzE0YPJjQI 2TH5PDlpeoa9Tci5RVuos2YMVo+RlZTOVhsusbE= X-Google-Smtp-Source: APXvYqydI+4EP3dsUrXmWLL5d6kf6TOOLzgdqvDVz56Rpd9MEYS9ZdQysBuqWQS8Yi2tncEfXArIbYtOUMedD24HhZA= X-Received: by 2002:a5d:66d2:: with SMTP id k18mr8973963wrw.7.1568938396076; Thu, 19 Sep 2019 17:13:16 -0700 (PDT) MIME-Version: 1.0 References: <1568896556-28769-1-git-send-email-guoren@kernel.org> In-Reply-To: From: Guo Ren Date: Fri, 20 Sep 2019 08:13:02 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma To: Andrew Waterman Cc: julien.thierry@arm.com, Catalin Marinas , Palmer Dabbelt , Will Deacon , Atish Patra , Julien Grall , gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, Jean-Philippe Brucker , linux-csky@vger.kernel.org, Mike Rapoport , Guo Ren , benh@kernel.crashing.org, tech-privileged@lists.riscv.org, Marc Zyngier , linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup Patel , Linux Kernel Mailing List , iommu@lists.linux-foundation.org, dwmw2@infradead.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org SGksCgpPbiBGcmksIFNlcCAyMCwgMjAxOSBhdCAxMjoxMCBBTSBBbmRyZXcgV2F0ZXJtYW4gPGFu ZHJld0BzaWZpdmUuY29tPiB3cm90ZToKPgo+IFRoaXMgbmVlZHMgdG8gYmUgZGlzY3Vzc2VkIGFu ZCBkZWJhdGVkIGF0IGxlbmd0aDsgcHJvcG9zaW5nIGVkaXRzIHRvIHRoZSBzcGVjIGF0IHRoaXMg c3RhZ2UgaXMgcHV0dGluZyB0aGUgY2FydCBiZWZvcmUgdGhlIGhvcnNlIQpBZ3JlZSA6KQoKPgo+ IFdlIHNob3VsZG7igJl0IGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZXhpc3RpbmcgU0ZF TkNFLlZNQSBpbnN0cnVjdGlvbiB0byBhY2NvbXBsaXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBh YnVuZGFudGx5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBzaG91bGQgYmUgYW4gaW5zdHJ1Y3Rpb246 CklmIHlvdSBpbXBsZW1lbnQgc2ZlbmNlLnZtYSBhcyBjdXJyZW50IGRlZmluZSwgaXQgYWxzbyBj b3VsZCB3b3JrIHdpdGgKbmV3IG1lY2hhbmlzbSwgdGhleSBhcmUgY29tcGF0aWJsZS4KCj4gVExC IHNob290ZG93biBsb29rcyBtb3JlIGxpa2UgTU1JTy4KUGVyLUNQVSBNTUlPID8gSSB0aGUgcHJv cG9zYWwsIGV2ZXJ5IGhhcnQgb25seSB0YWtlcyBjYXJlIG9mIGl0cyBvd24gcmVxdWVzdC4KCgoK Cj4KPiBPbiBUaHUsIFNlcCAxOSwgMjAxOSBhdCA1OjM2IEFNIEd1byBSZW4gPGd1b3JlbkBrZXJu ZWwub3JnPiB3cm90ZToKPj4KPj4gRnJvbTogR3VvIFJlbiA8cmVuX2d1b0BjLXNreS5jb20+Cj4+ Cj4+IFRoZSBwYXRjaCBpcyBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWlzYS1t YW51YWwKPj4KPj4gVGhlIHByb3Bvc2FsIGhhcyBiZWVuIHRhbGtlZCBpbiBMUEMtMjAxOSBSSVND LVYgTUMgcmVmIFsxXS4gSGVyZSBpcyB0aGUKPj4gZm9ybWFsIHBhdGNoLgo+Pgo+PiBJbnRyb2R1 Y3Rpb24KPj4gPT09PT09PT09PT09Cj4+Cj4+IFVzaW5nIHRoZSBIYXJkd2FyZSBUTEIgYnJvYWRj YXN0IGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbiB0byBtYWludGFpbiB0aGUKPj4gc3lzdGVtIFRM QiBpcyBhIGdvb2QgY2hvaWNlIGFuZCBpdCdsbCBzaW1wbGlmeSB0aGUgc3lzdGVtIHNvZnR3YXJl IGRlc2lnbi4KPj4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBtb2RlIHRv IHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+PiByaXNjdi1wcml2aWxlZ2Ugc3BlY2lmaWNhdGlvbi4g VG8gc3VwcG9ydCB0aGUgc2ZlbmNlLnZtYSBicm9hZGNhc3QgbW9kZSwKPj4gdGhlcmUgYXJlIHR3 byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPj4KPj4gIDEpIEFkZCBQR0QuUFBOIChy b290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUKPj4g ICAgIGFkZHJlc3Mgc3BhY2UgaW4gYWRkaXRpb24gdG8gYXNpZC92bWlkLiBDb21wYXJlZCB0byB0 aGUgZHluYW1pY2FsbHkKPj4gICAgIGNoYW5nZWQgYXNpZC92bWlkLCBQR0QuUFBOIGlzIGZpeGVk IHRocm91Z2hvdXQgdGhlIGFkZHJlc3Mgc3BhY2UgbGlmZQo+PiAgICAgY3ljbGUuIFRoaXMgZmVh dHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVzcyBzcGFjZSBpZGVudGlmaWNhdGlvbgo+PiAgICAg YmV0d2VlbiBkaWZmZXJlbnQgVExCIHN5c3RlbXMgKGFjdHVhbGx5LCBpdCdzIGRpZmZpY3VsdCB0 byB1bmlmeSB0aGUKPj4gICAgIGFzaWQvdm1pZCBiZXR3ZWVuIHRoZSBDUFUgc3lzdGVtIGFuZCB0 aGUgSU9NTVUgc3lzdGVtLCBiZWNhdXNlIHRoZWlyCj4+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZm ZXJlbnQpCj4+Cj4+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEg aW5zdHJ1Y3Rpb24gZnJvbSBzeW5jaHJvbm91cwo+PiAgICAgbW9kZSB0byBhc3luY2hyb25vdXMg bW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgVExCCj4+ICAgICBv cGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgd2hlbiB0aGUgc2ZlbmNlLnZtYSBpbnN0cnVjdGlv biByZXRpcmVzLgo+PiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNraW5nIHRo ZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4gVGhlCj4+ICAgICBzZmVuY2Uudm1hIHJlcXVlc3QgZmlu aXNoIGNhbiBub3RpZnkgdGhlIHNvZnR3YXJlIGJ5IGdlbmVyYXRpbmcgYW4KPj4gICAgIGludGVy cnVwdC4gVGhpcyBmdW5jdGlvbiBhbGxldmlhdGVzIHRoZSBsYXJnZSBkZWxheSBvZiBUTEIgaW52 YWxpZGF0aW9uCj4+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0ZW0uCj4+Cj4+IEFkZCBTMS9TMi5Q R0QuUFBOIGZvciBBU0lEL1ZNSUQKPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ Pgo+PiBQR0QgaXMgZ2xvYmFsIGRpcmVjdG9yeSAoZGVmaW5lZCBpbiBsaW51eCkgYW5kIFBQTiBp cyBwYWdlIHBoeXNpY2FsIG51bWJlcgo+PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBO TiBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBwYWdlIHRhYmxlIHBvaW50ZXIKPj4gb2YgdGhlIGFk ZHJlc3Mgc3BhY2UsIGkuZS4gbW0tPnBnZCAobGludXggY29uY2VwdCkuCj4+Cj4+IEluIENQVS9J T01NVSBUTEIsIHdlIHVzZSBhc2lkL3ZtaWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGFkZHJlc3Mgc3Bh Y2Ugb2YKPj4gcHJvY2VzcyBvciB2aXJ0dWFsIG1hY2hpbmUuIER1ZSB0byB0aGUgbGltaXRhdGlv biBvZiBpZCBlbmNvZGluZywgaXQgY2FuCj4+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cp IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOIGFyZSB0aGUKPj4gcm9vdCBwYWdl IHRhYmxlJ3MgUFBOcyBvZiB0aGUgYWRkcmVzcyBzcGFjZXMgYW5kIFMxL1MyLlBHRC5QUE4gYXJl IHRoZQo+PiB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWRkcmVzcyBzcGFjZXMuCj4+Cj4+IEZv ciB0aGUgQ1BVIFNNUCBzeXN0ZW0sIHlvdSBjYW4gdXNlIGNvbnRleHQgc3dpdGNoIHRvIHBlcmZv cm0gdGhlIG5lY2Vzc2FyeQo+PiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgdGhl IGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMgY29uc2lzdGVudAo+PiAocGxlYXNlIHJlZmVyIHRv IHRoZSBhcm02NCBhc2lkIG1lY2hhbmlzbSkuIEluIHRoaXMgd2F5LCB0aGUgVExCIGJyb2FkY2Fz dAo+PiBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gY2FuIGRldGVybWluZSB0aGUgYWRkcmVzcyBz cGFjZSBwcm9jZXNzZWQgb24gYWxsCj4+IGhhcnRzIGJ5IGFzaWQvdm1pZC4KPj4KPj4gRGlmZmVy ZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVtLCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBm b3IgdGhlCj4+IERNQS1JT01NVSBzeXN0ZW0sIHNvIHRoZSB1bmlmaWNhdGlvbiB3aXRoIHRoZSBD UFUgYXNpZC92bWlkIGNhbm5vdCBiZQo+PiBndWFyYW50ZWVkLiBTbyB3ZSBuZWVkIGEgdW5pcXVl IGlkZW50aWZpZXIgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIHRvCj4+IGVzdGFibGlzaCBhIGNvbW11 bmljYXRpb24gYnJpZGdlIGJldHdlZW4gdGhlIFRMQnMgb2YgZGlmZmVyZW50IHN5c3RlbXMuCj4+ Cj4+IFRoYXQgaXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIu UEdELlBQTikKPj4KPj4gY3VycmVudDoKPj4gIHNmZW5jZS52bWEgIHJzMSA9IHZhZGRyLCByczIg PSBhc2lkCj4+ICBoZmVuY2UudnZtYSByczEgPSB2YWRkciwgcnMyID0gYXNpZAo+PiAgaGZlbmNl Lmd2bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPj4KPj4gcHJvcG9zZWQ6Cj4+ICBzZmVuY2Uu dm1hICByczEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+PiAgaGZlbmNlLnZ2bWEgcnMx ID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPj4gIGhmZW5jZS5ndm1hIHJzMSA9IGdhZGRy LCByczIgPSBtb2RlOnBwbjp2bWlkCj4+Cj4+ICBtb2RlICAgICAgLSBicm9hZGNhc3QgfCBsb2Nh bAo+PiAgcHBuICAgICAgIC0gdGhlIFBQTiBvZiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgcm9v dCBwYWdlIHRhYmxlCj4+ICB2bWlkL2FzaWQgLSB0aGUgd2luZG93IGlkZW50aWZpZXIgb2YgdGhl IGFkZHJlc3Mgc3BhY2UKPj4KPj4gQXQgdGhlIExpbnV4IFBsdW1iZXIgQ29uZmVyZW5jZSAyMDE5 IFJJU0NWLU1DLCByZWY6WzFdLCB3ZSd2ZSBzaG93ZWQgdHdvCj4+IElPTU1VIGV4YW1wbGVzIHRv IGV4cGxhaW4gaG93IGl0IHdvcmsgd2l0aCBoYXJkd2FyZS4KPj4KPj4gMSkgSW4gYSBsaWdodHdl aWdodCBJT01NVSBzeXN0ZW0gKHVwIHRvIDY0IGFkZHJlc3Mgc3BhY2VzKSwgdGhlIGhhcmR3YXJl Cj4+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdELlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJ RCkKPj4KPj4gMikgRm9yIHRoZSBQQ0kgQVRTIHNjZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVu Y29kaW5nIHNwYWNlIGNhbiBzdXBwb3J0Cj4+ICAgIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgYWRk cmVzcyBzcGFjZXMuIFdlIHVzZSB0d28gcmV2ZXJzZSBtYXBwaW5nCj4+ICAgIHRhYmxlcyB0byBs ZXQgdGhlIGhhcmR3YXJlIHRyYW5zbGF0ZSBTMS9TMi5QR0QuUFBOIGludG8gSU8gQVNJRC9WTUlE Lgo+Pgo+PiBBU1lOQyBCUk9BRENBU1QgU0ZFTkNFLlZNQQo+PiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPj4KPj4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVu Y2Uudm1hIG9wZXJhdGlvbiBpbiB0aGUgUENJIEFUUwo+PiB1c2FnZSBzY2VuYXJpbywgd2UgbW9k aWZ5IHRoZSBzZmVuY2Uudm1hIGZyb20gc3luY2hyb25vdXMgbW9kZSB0bwo+PiBhc3luY2hyb25v dXMgbW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5IGlt cGxlbWVudAo+PiBzeW5jaHJvbm91cyBtb2RlIGFuZCBzb2Z0d2FyZSBzdGlsbCB3b3JrIGluIGFz eW5jaHJvbm91cyBtb2RlKQo+Pgo+PiBUbyBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBtb2Rl LCAzIGZlYXR1cmVzIGFyZSBhZGRlZDoKPj4gIDEpIHNzdGF0dXM6VExCSQo+PiAgICAgQSAic3Rh dHVzIGJpdCAtIFRMQkkiIGlzIGFkZGVkIHRvIHRoZSBzc3RhdHVzIHJlZ2lzdGVyLiBUaGUgVExC SSBzdGF0dXMKPj4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5k aW5nIHNmZW5jZS52bWEgcmVxdWVzdHMgb24gdGhlCj4+ICAgICBjdXJyZW50IGhhcnQuCj4+ICAg ICBWYWx1ZToKPj4gICAgICAgMTogc2ZlbmNlLnZtYSByZXF1ZXN0cyBhcmUgbm90IGNvbXBsZXRl ZC4KPj4gICAgICAgMDogYWxsIHNmZWNlLnZtYSByZXF1ZXN0cyBjb21wbGV0ZWQsIHJlcXVlc3Qg cXVldWUgaXMgZW1wdHkuCj4+Cj4+ICAyKSBzc3RhdHVzOlRMQklDCj4+ICAgICBBICJjb250cm9s IGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1cyByZWdpc3Rlci4gVGhlIFRMQklDIGNv bnRyb2wKPj4gICAgIGJpdHMgYXJlIGNvbnRyb2xsZWQgYnkgc29mdHdhcmUuCj4+ICAgICAiV3Jp dGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJyZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJl IGFyZSBzdGlsbAo+PiAgICAgb3V0c3RhbmRpbmcgc2ZlbmNlLnZtYSByZXF1ZXN0cy4gSWYgdGhl cmUgYXJlIHVuZmluaXNoZWQgcmVxdWVzdHMsIGFuCj4+ICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBn ZW5lcmF0ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIG5vdGlmeWluZyB0aGUKPj4g ICAgIHNvZnR3YXJlIHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMg aGF2ZSBiZWVuIGNvbXBsZXRlZC4KPj4gICAgICJXcml0ZSAwIiB3aWxsIGNhdXNlIG5vdGhpbmcu Cj4+Cj4+ICAzKSBzdXBlcnZpc29yIGludGVycnVwdCByZWdpc3RlciAoc2lwICYgc2llKTpUTEJJ IGZpbmlzaCBpbnRlcnJ1cHQKPj4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRv IHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVycy4KPj4gICAgIFdoZW4gYWxsIHNmZW5jZS52 bWEgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBhbmQgc3N0YXR1czpUTEJJQyBoYXMgYmVlbgo+PiAg ICAgdHJpZ2dlcmVkLCBoYXJ0IHdpbGwgcmVjZWl2ZSBhIFRMQkkgZmluaXNoIGludGVycnVwdC4g SnVzdCBsaWtlIHRpbWVyLAo+PiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFsIGludGVycnVwdCdz IGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+Pgo+PiBGYWtlIGNvZGU6Cj4+Cj4+IGZsdXNoX3Rs Yl9wYWdlKHZtYSwgYWRkcikgewo+PiAgICAgYXNpZCA9IGNwdV9hc2lkKHZtYS0+dm1fbW0pOwo+ PiAgICAgcHBuID0gUEZOX0RPV04odm1hLT52bV9tbS0+cGdkKTsKPj4KPj4gICAgIHNmZW5jZS52 bWEgKGFkZHIsIDF8UFBOX09GRlNFVChwcG4pfGFzaWQpOyAvLzEuIHN0YXJ0IHJlcXVlc3QKPj4K Pj4gICAgIHdoaWxlKHNzdGF0dXM6VExCSSkgaWYgKHRpbWVfb3V0KCkgPiAxbXMpIGJyZWFrOyAv LzIuIGxvb3AgY2hlY2sKPj4KPj4gICAgIHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPj4gICAgICAg ICAuLi4KPj4gICAgICAgICBzZXQgc3N0YXR1czpUTEJJQzsKPj4gICAgICAgICB3YWl0X1RMQklf ZmluaXNoX2ludGVycnVwdCgpOyAvLzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+PiAgICAgfQo+ PiB9Cj4+Cj4+IEhlcmUgd2UgZ2l2ZSAyIGxldmVsIGNoZWNrOgo+PiAgMSkgbG9vcCBjaGVjayBz c3RhdHVzOlRMQkksIENQVSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4+ICAyKSBzZXQgc3N0 YXR1czpUTEJJQyBhbmQgd2FpdCBmb3IgaXJxLCBDUFUgc2NoZWR1bGUgb3V0IGZvciBvdGhlciB0 YXNrLgo+Pgo+PiBBQ0UtRFZNIEV4YW1wbGUKPj4gPT09PT09PT09PT09PT09Cj4+Cj4+IEhvbmVz dGx5LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8gaW50 ZXJjb25uZWN0cyIKPj4gYW5kICJBU1lOQyBTRkVOQ0UuVk1BIiBjb3VsZCBiZSBpbXBsZW1lbnRl ZCBieSBBQ0UtRFZNIHByb3RvY29sIHJlZiBbMl0uCj4+Cj4+IFRoZXJlIGFyZSAzIHR5cGVzIG9m IHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4+Cj4+ICAtIERWTSBvcGVyYXRpb24KPj4gICAgU2VuZCBh bGwgaW5mb3JtYXRpb24gdG8gdGhlIGludGVyY29ubmVjdCwgaW5jbHVkaW5nIGFkZHIsIGFzaWQs Cj4+ICAgIFMxLlBHRC5QUE4sIHZtaWQsIFMyLlBHRC5QUE4uCj4+Cj4+ICAtIERWTSBzeW5jaHJv bml6YXRpb24KPj4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIGNv bXBsZXRlZC4gSWYgbm90LCBpdCB3aWxsIHVzZQo+PiAgICBzdGF0ZSBtYWNoaW5lIHRvIHdhaXQg RFZNIGNvbXBsZXRlIHJlcXVlc3RzLgo+Pgo+PiAgLSBEVk0gY29tcGxldGUKPj4gICAgUmV0dXJu IHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywgZWc6IElPTU1VLiBJZiBoYXJ0IGhhcyByZWNl aXZlZCBhbGwKPj4gICAgRFZNIGNvbXBsZXRlcyB3aGljaCBhcmUgdHJpZ2dlcmVkIGJ5IHNmZW5j ZS52bWEgaW5zdHJ1Y3Rpb25zIGFuZAo+PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0 LCBhIFRMQkkgZmluaXNoIGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCj4+Cj4+IChBY3R1YWxseSwg d2UgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBmdW5jdGlvbnMgc3RyaWN0bHkK Pj4gIGFjY29yZGluZyB0byB0aGUgQUNFIHNwZWNpZmljYXRpb24gOlAgKQo+Pgo+PiAgMTogaHR0 cHM6Ly93d3cubGludXhwbHVtYmVyc2NvbmYub3JnL2V2ZW50LzQvY29udHJpYnV0aW9ucy8zMDcv Cj4+ICAyOiBBTUJBIEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmli dXRlZCBWaXJ0dWFsIE1lbW9yeQo+PiAgICAgVHJhbnNhY3Rpb25zIgo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPj4gUmV2aWV3ZWQtYnk6IExpIEZlaXRl bmcgPGZlaXRlbmdfbGlAYy1za3kuY29tPgo+PiAtLS0KPj4gIHNyYy9oeXBlcnZpc29yLnRleCB8 ICA0MyArKysrKysrKy0tLS0tLS0KPj4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgMiBmaWxl cyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvaHlwZXJ2aXNvci50ZXggYi9zcmMvaHlwZXJ2aXNvci50ZXgKPj4gaW5kZXgg NDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPj4gLS0tIGEvc3JjL2h5cGVydmlzb3IudGV4Cj4+ICsr KyBiL3NyYy9oeXBlcnZpc29yLnRleAo+PiBAQCAtMTA5NCwxNSArMTA5NCwxNSBAQCBUaGUgaHlw ZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3IHByaXZpbGVnZWQgZmVuY2UgaW5zdHJ1Y3Rp b25zLgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtvcGNvZGV9IFxcCj4+ICBcaGxpbmUKPj4gIDcg JiA1ICYgNSAmIDMgJiA1ICYgNyBcXAo+PiAtSEZFTkNFLkdWTUEgJiB2bWlkICYgZ2FkZHIgJiBQ UklWICYgMCAmIFNZU1RFTSBcXAo+PiAtSEZFTkNFLlZWTUEgJiBhc2lkICYgdmFkZHIgJiBQUklW ICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLkdWTUEgJiBtb2RlOnBwbjp2bWlkICYgZ2FkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLlZWTUEgJiBtb2RlOnBwbjphc2lkICYg dmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+ICBUaGUgaHlwZXJ2aXNvciBtZW1vcnktbWFuYWdlbWVudCBmZW5jZSBpbnN0 cnVjdGlvbnMsIEhGRU5DRS5HVk1BIGFuZAo+PiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5 IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1zdGF0dXN9LlRWTT0wLCBvciBpbiBNLW1vZGUKPj4gIChp cnJlc3BlY3RpdmUgb2Yge1x0dCBtc3RhdHVzfS5UVk0pLgo+PiAtVGhlc2UgaW5zdHJ1Y3Rpb25z IHBlcmZvcm0gYSBmdW5jdGlvbiBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPj4gK1RoZXNlIGluc3Ry dWN0aW9ucyBwZXJmb3JtIGEgZnVuY3Rpb24gc2ltaWxhciB0byBTRkVOQ0UuVk1BIChicm9hZGNh c3QvbG9jYWwpCj4+ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBs eWluZyB0byB0aGUgZ3Vlc3QtcGh5c2ljYWwKPj4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3Ry dWN0dXJlcyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfSAoSEZFTkNFLkdWTUEpCj4+ICBv ciB0aGUgVlMtbGV2ZWwgbWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRyb2xs ZWQgYnkgQ1NSIHtcdHQgdnNhdHB9Cj4+IEBAIC0xMTM2LDExICsxMTM2LDEwIEBAIEFuIEhGRU5D RS5WVk1BIGluc3RydWN0aW9uIGFwcGxpZXMgb25seSB0byBhIHNpbmdsZSB2aXJ0dWFsIG1hY2hp bmUsIGlkZW50aWZpZWQKPj4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9LlZNSUQgd2hl biBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPj4gIFxlbmR7Y29tbWVudGFyeX0KPj4KPj4gLVdoZW4g e1xlbSByczJ9JFxuZXEke1x0dCB4MH0sIGJpdHMgWExFTi0xOkFTSURNQVggb2YgdGhlIHZhbHVl IGhlbGQgaW4ge1xlbQo+PiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUgYW5kIGlnbm9yZWQKPj4gLWJ5IGN1cnJlbnQgaW1w bGVtZW50YXRpb25zLgo+PiAtRnVydGhlcm1vcmUsIGlmIEFTSURMRU5+JDwkfkFTSURNQVgsIHRo ZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUgYml0cwo+PiAtQVNJRE1BWC0xOkFTSURMRU4g b2YgdGhlIHZhbHVlIGhlbGQgaW4ge1xlbSByczJ9Lgo+PiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7 XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLCBwcG4sIGFzaWQuCj4+ ICsxKSBtb2RlIGNvbnRyb2wgSEZFTkNFLlZWTUEgYnJvYWRjYXN0IG9yIG5vdC4KPj4gKzIpIHBw biBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2Uu Cj4+ICszKSBhc2lkIGlzIHRoZSBpZGVudGlmaWVyIG9mIHByb2Nlc3MgaW4gdmlydHVhbCBtYWNo aW5lLgo+Pgo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9u cyBvZiBIRkVOQ0UuVlZNQSBjYW4gaWdub3JlIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW4K Pj4gQEAgLTExNjgsMTEgKzExNjcsMTAgQEAgcGh5c2ljYWwgYWRkcmVzc2VzIGluIFBNUCBhZGRy ZXNzIHJlZ2lzdGVycyAoU2VjdGlvbn5ccmVme3NlYzpwbXB9KSBhbmQgaW4gcGFnZQo+PiAgdGFi bGUgZW50cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LCBhbmR+ XHJlZntzZWM6c3Y0OH0pLgo+PiAgXGVuZHtjb21tZW50YXJ5fQo+Pgo+PiAtV2hlbiB7XGVtIHJz Mn0kXG5lcSR7XHR0IHgwfSwgYml0cyBYTEVOLTE6Vk1JRE1BWCBvZiB0aGUgdmFsdWUgaGVsZCBp biB7XGVtCj4+IC1yczJ9IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hvdWxkIGJl IHplcm9lZCBieSBzb2Z0d2FyZSBhbmQgaWdub3JlZAo+PiAtYnkgY3VycmVudCBpbXBsZW1lbnRh dGlvbnMuCj4+IC1GdXJ0aGVybW9yZSwgaWYgVk1JRExFTn4kPCR+Vk1JRE1BWCwgdGhlIGltcGxl bWVudGF0aW9uIHNoYWxsIGlnbm9yZSBiaXRzCj4+IC1WTUlETUFYLTE6Vk1JRExFTiBvZiB0aGUg dmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4+ICtXaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9 LCBiaXRzIGNvbnRhaW4gMyBpbmZvcm1hdGlvbnM6IG1vZGUsIHZtaWQsIHBwbi4KPj4gKzEpIG1v ZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+PiArMikgcHBuIGlzIHRo ZSByb290IHBhZ2UgdGFsYmUncyBQUE4gb2YgdGhlIHZtaWQgYWRkcmVzcyBzcGFjZS4KPj4gKzMp IHZtaWQgaXMgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBtYWNoaW5lLgo+Pgo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBj YW4gaWdub3JlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGluCj4+IEBAIC0xNTY3LDIxICsx NTY1LDIyIEBAIHJlZ2lzdGVyLgo+PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVu Y2VzfQo+Pgo+PiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlz IGFmZmVjdGVkIGJ5IHRoZSBjdXJyZW50Cj4+IC12aXJ0dWFsaXphdGlvbiBtb2RlIFYuICBXaGVu IFY9MCwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCBpcyBhbiBIUy1sZXZlbAo+PiAtdmly dHVhbCBhZGRyZXNzLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYW4gSFMtbGV2ZWwgQVNJRC4K Pj4gK3ZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgcnMxIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsCj4+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTi4KPj4gIFRoZSBpbnN0 cnVjdGlvbiBvcmRlcnMgc3RvcmVzIG9ubHkgdG8gSFMtbGV2ZWwgYWRkcmVzcy10cmFuc2xhdGlv biBzdHJ1Y3R1cmVzCj4+ICB3aXRoIHN1YnNlcXVlbnQgSFMtbGV2ZWwgYWRkcmVzcyB0cmFuc2xh dGlvbnMuCj4+Cj4+IC1XaGVuIFY9MSwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCB0byBT RkVOQ0UuVk1BIGlzIGEgZ3Vlc3QgdmlydHVhbAo+PiAtYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJl bnQgdmlydHVhbCBtYWNoaW5lLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYSBWUy1sZXZlbAo+ PiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5lLgo+PiArV2hlbiBWPTEs IHRoZSByczEgYXJndW1lbnQgdG8gU0ZFTkNFLlZNQSBpcyBhIGd1ZXN0IHZpcnR1YWwKPj4gK2Fk ZHJlc3Mgd2l0aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSByczIgYXJn dW1lbnQgaXMgYSBWUy1sZXZlbAo+PiArQVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHdp dGhpbiB0aGUgY3VycmVudCB2aXJ0dWFsIG1hY2hpbmUuCj4+ICBUaGUgY3VycmVudCB2aXJ0dWFs IG1hY2hpbmUgaXMgaWRlbnRpZmllZCBieSB0aGUgVk1JRCBmaWVsZCBvZiBDU1Ige1x0dCBoZ2F0 cH0sCj4+IC1hbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHRo ZSBjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQKPj4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4+ ICthbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gY2FuIGJl IGNvbnNpZGVyZWQgdG8gYmUgdGhlCj4+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJv b3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoIHRoZSBWUy1sZXZlbCBBU0lEIGFuZAo+PiArcm9vdCBw YWdlIHRhYmxlJ3MgUFBOLgo+PiAgVGhlIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24gb3JkZXJzIHN0 b3JlcyBvbmx5IHRvIHRoZSBWUy1sZXZlbAo+PiAgYWRkcmVzcy10cmFuc2xhdGlvbiBzdHJ1Y3R1 cmVzIHdpdGggc3Vic2VxdWVudCBWUy1sZXZlbCBhZGRyZXNzIHRyYW5zbGF0aW9ucwo+PiAtZm9y IHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdhdHB9LlZN SUQgaXMgdGhlIHNhbWUgYXMKPj4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4+ICtm b3IgdGhlIHNhbWUgdmlydHVhbCBtYWNoaW5lLCBpLmUuLCBvbmx5IHdoZW4ge1x0dCBoZ2F0cH0u Vk1JRCBhbmQge1xcdHQgaGdhdHB9LlBQTiBpcwo+PiArdGhlIHNhbWUgYXMgd2hlbiB0aGUgU0ZF TkNFLlZNQSBleGVjdXRlZC4KPj4KPj4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rpb25zIEhGRU5DRS5H Vk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlIGFkZGl0aW9uYWwKPj4gIG1lbW9yeS1tYW5hZ2Vt ZW50IGZlbmNlcyB0byBjb21wbGVtZW50IFNGRU5DRS5WTUEuCj4+IGRpZmYgLS1naXQgYS9zcmMv c3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPj4gaW5kZXggYmEzY2VkNS4uMjg3 N2I3YSAxMDA2NDQKPj4gLS0tIGEvc3JjL3N1cGVydmlzb3IudGV4Cj4+ICsrKyBiL3NyYy9zdXBl cnZpc29yLnRleAo+PiBAQCAtNDcsMTAgKzQ3LDEyIEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9m IHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxiZWdpbntjZW50 ZXJ9Cj4+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gIFxzY2FsZWJveHswLjk1fXsK Pj4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2NjV2NjY2NXY2N9Cj4+ICtcYmVnaW57dGFidWxhcn17 Y2NjV2NjY2NjV2NjY2NXY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7MzF9ICYKPj4gLVxpbnN0Yml0 cmFuZ2V7MzB9ezIwfSAmCj4+ICtcaW5zdGJpdHszMH0gJgo+PiArXGluc3RiaXR7Mjl9ICYKPj4g K1xpbnN0Yml0cmFuZ2V7Mjh9ezIwfSAmCj4+ICBcaW5zdGJpdHsxOX0gJgo+PiAgXGluc3RiaXR7 MTh9ICYKPj4gIFxpbnN0Yml0ezE3fSAmCj4+IEBAIC02Niw2ICs2OCw4IEBAIHJlZ2lzdGVyIGtl ZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4g IFxpbnN0Yml0ezB9IFxcCj4+ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8 fXtUTEJJQ30gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29s dW1uezF9e2N8fXtNWFJ9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1VNfSAmCj4+IEBAIC04 Miw3ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJy ZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9Cj4+ICBc XAo+PiAgXGhsaW5lCj4+IC0xICYgMTEgJiAxICYgMSAmIDEgJiAyICYgMiAmIDQgJiAxICYgMSAm IDEgJiAxICYgMyAmIDEgJiAxIFxcCj4+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYgMSAmIDIg JiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn19 Cj4+ICBcZW5ke2NlbnRlcn0KPj4gIH0KPj4gQEAgLTk1LDEwICs5OSwxMiBAQCByZWdpc3RlciBr ZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUuCj4+ ICB7XGZvb3Rub3Rlc2l6ZQo+PiAgXGJlZ2lue2NlbnRlcn0KPj4gIFxzZXRsZW5ndGh7XHRhYmNv bHNlcH17NHB0fQo+PiAtXGJlZ2lue3RhYnVsYXJ9e2NNRlNjY2NjfQo+PiArXGJlZ2lue3RhYnVs YXJ9e2NjY01GU2NjY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7U1hMRU4tMX0gJgo+PiAtXGluc3Ri aXRyYW5nZXtTWExFTi0yfXszNH0gJgo+PiArXGluc3RiaXR7U1hMRU4tMn0gJgo+PiArXGluc3Ri aXR7U1hMRU4tM30gJgo+PiArXGluc3RiaXRyYW5nZXtTWExFTi00fXszNH0gJgo+PiAgXGluc3Ri aXRyYW5nZXszM317MzJ9ICYKPj4gIFxpbnN0Yml0cmFuZ2V7MzF9ezIwfSAmCj4+ICBcaW5zdGJp dHsxOX0gJgo+PiBAQCAtMTA3LDYgKzExMyw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRo ZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gICBcXAo+PiAgXGhsaW5l Cj4+ICBcbXVsdGljb2x1bW57MX17fGN8fXtTRH0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 VExCSX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPj4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17VVhMWzE6MF19ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9ICYKPj4gQEAgLTExNSw3ICsxMjMsNyBAQCByZWdp c3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3Rh dGUuCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICAgXFwKPj4gIFxobGluZQo+ PiAtMSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gKzEgJiAxICYgMSAm IFNYTEVOLTM3ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPj4gIFxcCj4+IEBAIC0xNTIsNiArMTYwLDE3 IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJh dGluZyBzdGF0ZS4KPj4gIFxsYWJlbHtzc3RhdHVzcmVnfQo+PiAgXGVuZHtmaWd1cmUqfQo+Pgo+ PiArVGhlIFRMQkkgKHJlYWQtb25seSkgYml0IGluZGljYXRlcyB0aGF0IGFueSBhc3luYyBzZmVu Y2Uudm1hIG9wZXJhdGlvbnMgYXJlCj4+ICtzdGlsbCBwZW5kZWQgb24gdGhlIGhhcnQuIFRoZSB2 YWx1ZTowIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2ZlbmNlLnZtYQo+PiArb3BlcmF0aW9ucyBw ZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHNmZW5jZS52bWEg b3BlcmF0aW9ucwo+PiArcGVuZGluZyBvbiB0aGUgaGFydC4KPj4gKwo+PiArV2hlbiB0aGUgc3N0 YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAxLCBpdCB0cmlnZ2VycyB0aGUgaGFyZHdhcmUgdG8g Y2hlY2sgaWYKPj4gK3RoZXJlIGFyZSBhbnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWlu ZyBwZW5kZWQuIFdoZW4gYWxsIG9wZXJhdGlvbnMgYXJlCj4+ICtmaW5pc2hlZCwgYSBUTEIgSW52 YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkCj4+ICsoc2VlIFNlY3Rp b25+XHJlZntzaXByZWd9KS4gV2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAw LCBpdCB3aWxsCj4+ICtjYXVzZSBub3RoaW5nLiBSZWFkaW5nIHNzdGF0dXM6VExCSUMgYml0IHdp bGwgYWxhd2F5cyByZXR1cm4gMC4KPj4gKwo+PiAgVGhlIFNQUCBiaXQgaW5kaWNhdGVzIHRoZSBw cml2aWxlZ2UgbGV2ZWwgYXQgd2hpY2ggYSBoYXJ0IHdhcyBleGVjdXRpbmcgYmVmb3JlCj4+ICBl bnRlcmluZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNl dCB0byAwIGlmIHRoZSB0cmFwCj4+ICBvcmlnaW5hdGVkIGZyb20gdXNlciBtb2RlLCBvciAxIG90 aGVyd2lzZS4gIFdoZW4gYW4gU1JFVCBpbnN0cnVjdGlvbgo+PiBAQCAtMzI5LDggKzM0OCwxMCBA QCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBjb250YWluaW5nIGludGVycnVwdCBlbmFi bGUgYml0cy4KPj4gIHtcZm9vdG5vdGVzaXplCj4+ICBcYmVnaW57Y2VudGVyfQo+PiAgXHNldGxl bmd0aHtcdGFiY29sc2VwfXs0cHR9Cj4+IC1cYmVnaW57dGFidWxhcn17S2NGY0ZjY30KPj4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPj4gK1xiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNGY2N9 Cj4+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4+ICtcaW5zdGJpdHsxM30gJgo+PiAr XGluc3RiaXRyYW5nZXsxMn17MTB9ICYKPj4gIFxpbnN0Yml0ezl9ICYKPj4gIFxpbnN0Yml0cmFu Z2V7OH17Nn0gJgo+PiAgXGluc3RiaXR7NX0gJgo+PiBAQCAtMzM5LDYgKzM2MCw4IEBAIFNYTEVO LWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcgaW50ZXJydXB0IGVuYWJsZSBiaXRz Lgo+PiAgXGluc3RiaXR7MH0gXFwKPj4gIFxobGluZQo+PiAgXG11bHRpY29sdW1uezF9e3xjfH17 XHdwcml9ICYKPj4gK1xtdWx0aWNvbHVtbnsxfXtjfH17U1RMQklQfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17fGN8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTRUlQfSAmCj4+ICBc bXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9 ICYKPj4gQEAgLTM0Niw3ICszNjksNyBAQCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBj b250YWluaW5nIGludGVycnVwdCBlbmFibGUgYml0cy4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17 U1NJUH0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGluZQo+PiAt U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYgMSAmIDMg JiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxlbmR7Y2Vu dGVyfQo+PiAgfQo+PiBAQCAtMzU5LDggKzM4MiwxMCBAQCBTWExFTi0xMCAmIDEgJiAzICYgMSAm IDMgJiAxICYgMSBcXAo+PiAge1xmb290bm90ZXNpemUKPj4gIFxiZWdpbntjZW50ZXJ9Cj4+ICBc c2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ PiAtXGluc3RiaXRyYW5nZXtTWExFTi0xfXsxMH0gJgo+PiArXGJlZ2lue3RhYnVsYXJ9e0tjRmNG Y0ZjY30KPj4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPj4gK1xpbnN0Yml0ezEzfSAm Cj4+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+PiAgXGluc3RiaXR7OX0gJgo+PiAgXGluc3Ri aXRyYW5nZXs4fXs2fSAmCj4+ICBcaW5zdGJpdHs1fSAmCj4+IEBAIC0zNjksNiArMzk0LDggQEAg U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxpbnN0Yml0ezB9IFxcCj4+ ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17Y3x9e1NUTEJJRX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17XHdwcml9ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3By aX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTVElFfSAmCj4+IEBAIC0zNzYsNyArNDAzLDcg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxtdWx0aWNvbHVtbnsx fXtjfH17U1NJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGlu ZQo+PiAtU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYg MSAmIDMgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxl bmR7Y2VudGVyfQo+PiAgfQo+PiBAQCAtNDEwLDYgKzQzNywxMiBAQCB3aGVuIHRoZSBTRUlFIGJp dCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzIGNsZWFyLiAgVGhlIGltcGxlbWVudGF0aW9u Cj4+ICBzaG91bGQgcHJvdmlkZSBmYWNpbGl0aWVzIHRvIG1hc2ssIHVubWFzaywgYW5kIHF1ZXJ5 IHRoZSBjYXVzZSBvZiBleHRlcm5hbAo+PiAgaW50ZXJydXB0cy4KPj4KPj4gK0Egc3VwZXJ2aXNv ci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IGlzIHBlbmRpbmcgaWYgdGhl IFNUTEJJUCBiaXQKPj4gK2luIHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2 aXNvci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2gKPj4gK2ludGVycnVwdHMgYXJlIGRpc2Fi bGVkIHdoZW4gdGhlIFNUTEJJRSBiaXQgaW4gdGhlIHtcdHQgc2llfSByZWdpc3RlciBpcyBjbGVh ci4KPj4gK1doZW4gaGFydCB0bGIgaW52YWxpZGF0ZSBvcGVyYXRpb25zIGFyZSBmaW5pc2hlZCwg aGFyZHdhcmUgd2lsbCBjaGFuZ2Ugc3N0YXR1czpUTEJJCj4+ICtiaXQgZnJvbSAxIHRvIDAgYW5k IHRyaWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPj4gKwo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0gYW5kIHtcdHQKPj4gIG1pZX0gcmVnaXN0ZXJzLiAg UmVhZGluZyBhbnkgZmllbGQsIG9yIHdyaXRpbmcgYW55IHdyaXRhYmxlIGZpZWxkLCBvZiB7XHR0 Cj4+IEBAIC01OTgsNyArNjMxLDkgQEAgc28gaXMgb25seSBndWFyYW50ZWVkIHRvIGhvbGQgc3Vw cG9ydGVkIGV4Y2VwdGlvbiBjb2Rlcy4KPj4gICAgMSAgICAgICAgICYgNSAgICAgICAgICAgICAg ICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPj4gICAgMSAgICAgICAgICYgNi0tOCAg ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAgICAgICAgICYgOSAgICAgICAg ICAgICAgICYgU3VwZXJ2aXNvciBleHRlcm5hbCBpbnRlcnJ1cHQgXFwKPj4gLSAgMSAgICAgICAg ICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYg MTAtLTExICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYgMTIg ICAgICAgICAgICAgICYgU3VwZXJ2aXNvciBUTEJJIGZpbmlzaCBpbnRlcnJ1cHQgXFwKPj4gKyAg MSAgICAgICAgICYgMTMtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAg ICAgICAgICYgJFxnZSQxNiAgICAgICAgICYge1xlbSBBdmFpbGFibGUgZm9yIHBsYXRmb3JtIHVz ZX0gXFwgXGhsaW5lCj4+ICAgIDAgICAgICAgICAmIDAgICAgICAgICAgICAgICAmIEluc3RydWN0 aW9uIGFkZHJlc3MgbWlzYWxpZ25lZCBcXAo+PiAgICAwICAgICAgICAgJiAxICAgICAgICAgICAg ICAgJiBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgXFwKPj4gQEAgLTg4NCw3ICs5MTksNyBAQCBw cm92aWRlZC4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17b3Bjb2RlfSBcXAo+PiAgXGhsaW5lCj4+ ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPj4gLVNGRU5DRS5WTUEgJiBhc2lkICYgdmFkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArU0ZFTkNFLlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2 YWRkciAmIExPQ0FMICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+IEBAIC04OTksMjEgKzkzNCw3MCBAQCBmcm9tIHRoYXQgaGFydCB0byB0aGUg bWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzLgo+PiAgRnVydGhlciBkZXRhaWxzIG9u IHRoZSBiZWhhdmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+PiAgZGVzY3JpYmVkIGluIFNl Y3Rpb25+XHJlZnt2aXJ0LWNvbnRyb2x9IGFuZCBTZWN0aW9uflxyZWZ7cG1wLXZtZW19Lgo+Pgo+ PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLCB3aGljaCBtZWFucwo+PiArdGhhdCB0aGUgVExCIG9wZXJhdGlvbiBpcyBub3Qg Z3VhcmFudGVlZCB0byBjb21wbGV0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiByZXRpcmVzLgo+PiAr U29mdHdhcmUgbmVlZCBjaGVjayBzc3RhdHVzOlRMQkkgdG8gZGV0ZXJtaW5lIGFsbCBUTEIgb3Bl cmF0aW9ucyBjb21wbGV0ZS4KPj4gK1RoZSBzc3RhdHVzOlRMQkkgZGVzY3JpYmVkIGluIFNlY3Rp b25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZSBjaGFuZ2UKPj4gK3NzdGF0dXM6VExCSSBi aXQgZnJvbSAxIHRvIDAsIHRoZSBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwg YmUKPj4gK3RyaWdnZXJlZC4KPj4gKwo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+IC1UaGUgU0ZF TkNFLlZNQSBpcyB1c2VkIHRvIGZsdXNoIGFueSBsb2NhbCBoYXJkd2FyZSBjYWNoZXMgcmVsYXRl ZCB0bwo+PiArVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3Rl IGhhcmR3YXJlIGNhY2hlcyByZWxhdGVkIHRvCj4+ICBhZGRyZXNzIHRyYW5zbGF0aW9uLiAgSXQg aXMgc3BlY2lmaWVkIGFzIGEgZmVuY2UgcmF0aGVyIHRoYW4gYSBUTEIKPj4gIGZsdXNoIHRvIHBy b3ZpZGUgY2xlYW5lciBzZW1hbnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoIGluc3RydWN0aW9u cwo+PiAgYXJlIGFmZmVjdGVkIGJ5IHRoZSBmbHVzaCBvcGVyYXRpb24gYW5kIHRvIHN1cHBvcnQg YSB3aWRlciB2YXJpZXR5IG9mCj4+ICBkeW5hbWljIGNhY2hpbmcgc3RydWN0dXJlcyBhbmQgbWVt b3J5LW1hbmFnZW1lbnQgc2NoZW1lcy4gIFNGRU5DRS5WTUEKPj4gIGlzIGFsc28gdXNlZCBieSBo aWdoZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4+IC13cml0 ZXMgYW5kIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLgo+PiArd3JpdGVzIGFuZCB0 aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4gVGhlcmUgaXMgYSBtb2RlIGJpdCB0byBk ZXRlcm1pbmUKPj4gK3NmZW5jZS52bWEgd291bGQgYnJvYWRjYXN0IG9uIGludGVyY29ubmVjdCBv ciBub3QuCj4+ICBcZW5ke2NvbW1lbnRhcnl9Cj4+Cj4+IC1TRkVOQ0UuVk1BIG9yZGVycyBvbmx5 IHRoZSBsb2NhbCBoYXJ0J3MgaW1wbGljaXQgcmVmZXJlbmNlcyB0byB0aGUKPj4gLW1lbW9yeS1t YW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xm b290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17Y0B7fUVA e31LfQo+PiArXGluc3RiaXR7MzF9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7MzB9ezl9ICYKPj4gK1xp bnN0Yml0cmFuZ2V7OH17MH0gXFwKPj4gK1xobGluZQo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 e1x0dCBNT0RFfX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFn ZSB0YWJsZSl9fSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IEFTSUR9fSBcXAo+PiAr XGhsaW5lCj4+ICsxICYgMjIgJiA5IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRl cn0KPj4gK30KPj4gK1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1h IHJzMiBmb3JtYXQufQo+PiArXGxhYmVse3J2MzJzYXRwfQo+PiArXGVuZHtmaWd1cmV9Cj4+ICsK Pj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xmb290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50 ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17QHt9U0B7fVRAe31VfQo+PiArXGluc3RiaXRyYW5nZXs2 M317NjB9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7NTl9ezE2fSAmCj4+ICtcaW5zdGJpdHJhbmdlezE1 fXswfSBcXAo+PiArXGhsaW5lCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IFBQTiAocm9vdCBwYWdlIHRhYmxlKX19ICYK Pj4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e3tcdHQgQVNJRH19IFxcCj4+ICtcaGxpbmUKPj4gKzQg JiA0NCAmIDE2IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRlcn0KPj4gK30KPj4g K1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQs IGZvciBNT0RFIHZhbHVlcywgb25seSBoaWdoZXN0IGJpdDo2MyBpcwo+PiArdmFsaWQgYW5kIG90 aGVycyBhcmUgcmVzZXJ2ZWQufQo+PiArXGxhYmVse3J2NjRzYXRwfQo+PiArXGVuZHtmaWd1cmV9 Cj4+Cj4+ICBcYmVnaW57Y29tbWVudGFyeX0KPj4gLUNvbnNlcXVlbnRseSwgb3RoZXIgaGFydHMg bXVzdCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICtUaGUgbW9kZSdzIGhpZ2hl c3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoIDE6YnJvYWRjYXN0 IG9yIDA6bG9jYWwuCj4+ICtJZiBvbmx5IGhhdmUgbW9kZTpsb2NhbCwgb3RoZXIgaGFydHMgbXVz dCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICBtZW1vcnktbWFuYWdlbWVudCBk YXRhIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgo+PiAgT25lIGFwcHJvYWNoIGlzIHRv IHVzZSAxKQo+PiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBsb2NhbCB3cml0ZXMgYXJl IHZpc2libGUgZ2xvYmFsbHksIHRoZW4KPj4gQEAgLTkyOCw4ICsxMDEyLDE3IEBAIG1vZGlmaWVk IGZvciBhIHNpbmdsZSBhZGRyZXNzIG1hcHBpbmcgKGkuZS4sIG9uZSBwYWdlIG9yIHN1cGVycGFn ZSksIHtcZW0gcnMxfQo+PiAgY2FuIHNwZWNpZnkgYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRo YXQgbWFwcGluZyB0byBlZmZlY3QgYSB0cmFuc2xhdGlvbgo+PiAgZmVuY2UgZm9yIHRoYXQgbWFw cGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUKPj4g IHRyYW5zbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBoYXZlIG9ubHkgYmVlbiBtb2RpZmllZCBmb3Ig YSBzaW5nbGUgYWRkcmVzcy1zcGFjZQo+PiAtaWRlbnRpZmllciwge1xlbSByczJ9IGNhbiBzcGVj aWZ5IHRoZSBhZGRyZXNzIHNwYWNlLiAgVGhlIGJlaGF2aW9yIG9mCj4+IC1TRkVOQ0UuVk1BIGRl cGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4gK2lkZW50aWZp ZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBzcGFjZSB3aXRoIHtcdHQgc2F0 cH0gZm9ybWF0Cj4+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQ TiBpbmZvcm1hdGlvbi4KPj4gKwo+PiArXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICtXZSB1c2UgQVNJ RCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlIGFu ZCB0aGUgZm9ybWF0Cj4+ICtzdG9yZWQgaW4gcnMyIGlzIHNpbWlsYXIgd2l0aCB7XHR0IHNhdHB9 IGRlc2NyaWJlZCBpbiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+PiArQVNJRCBhcmUgdXNlZCBi eSBsb2NhbCBoYXJ0cyBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIG9mIHRoZSBhc2lkIGFyZSB1 c2VkIGJ5Cj4+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJT01NVS4KPj4gK1xl bmR7Y29tbWVudGFyeX0KPj4gKwo+PiArVGhlIGJlaGF2aW9yIG9mIFNGRU5DRS5WTUEgZGVwZW5k cyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcyBmb2xsb3dzOgo+Pgo+PiAgXGJlZ2lue2l0 ZW1pemV9Cj4+ICBcaXRlbSBJZiB7XGVtIHJzMX09e1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0 IHgwfSwgdGhlIGZlbmNlIG9yZGVycyBhbGwKPj4gQEAgLTkzOSwyMyArMTAzMiwxOCBAQCBTRkVO Q0UuVk1BIGRlcGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4g ICAgICAgIGFsbCByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdl IHRhYmxlcywgYnV0IG9ubHkKPj4gICAgICAgIGZvciB0aGUgYWRkcmVzcyBzcGFjZSBpZGVudGlm aWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAgICAgICAgQWNjZXNzZXMgdG8g e1xlbSBnbG9iYWx9IG1hcHBpbmdzIChzZWUgU2VjdGlvbn5ccmVme3NlYzp0cmFuc2xhdGlvbn0p Cj4+IC0gICAgICBhcmUgbm90IG9yZGVyZWQuCj4+ICsgICAgICBhcmUgbm90IG9yZGVyZWQuIFRo ZSBtb2RlIGZpZWxkIGluIHJzMiBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxvY2FsLgo+PiAg XGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwg dGhlIGZlbmNlIG9yZGVycwo+PiAgICAgICAgb25seSByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8g dGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nCj4+ICAgICAgICB0byB0aGUg dmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIGFsbCBhZGRyZXNzIHNwYWNlcy4KPj4g IFxpdGVtIElmIHtcZW0gcnMxfSRcbmVxJHtcdHQgeDB9IGFuZCB7XGVtIHJzMn0kXG5lcSR7XHR0 IHgwfSwgdGhlIGZlbmNlCj4+ICAgICAgICBvcmRlcnMgb25seSByZWFkcyBhbmQgd3JpdGVzIG1h ZGUgdG8gdGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeQo+PiAgICAgICAgY29ycmVzcG9uZGluZyB0 byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIHRoZSBhZGRyZXNzCj4+IC0g ICAgICBzcGFjZSBpZGVudGlmaWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAr ICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2VyIHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhl IG1vZGUgZmllbGQgaW4gcnMyCj4+ICsgICAgICBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxv Y2FsLgo+PiAgICAgICAgQWNjZXNzZXMgdG8gZ2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJl ZC4KPj4gIFxlbmR7aXRlbWl6ZX0KPj4KPj4gLVdoZW4ge1xlbSByczJ9JFxuZXEke1x0dCB4MH0s IGJpdHMgU1hMRU4tMTpBU0lETUFYIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0KPj4gLXJzMn0g YXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3 YXJlIGFuZCBpZ25vcmVkCj4+IC1ieSBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4gIEZ1cnRoZXJt b3JlLCBpZiBBU0lETEVOfiQ8JH5BU0lETUFYLCB0aGUKPj4gLWltcGxlbWVudGF0aW9uIHNoYWxs IGlnbm9yZSBiaXRzIEFTSURNQVgtMTpBU0lETEVOIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0K Pj4gLXJzMn0uCj4+IC0KPj4gIFxiZWdpbntjb21tZW50YXJ5fQo+PiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSBhbmQK Pj4gIHRoZSBBU0lEIHZhbHVlIGluIHtcZW0gcnMyfSBhbmQgYWx3YXlzIHBlcmZvcm0gYSBnbG9i YWwgZmVuY2UuCj4+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBzYW1lIFNG RU5DRS5WTUEgaW5zdHJ1Y3Rpb24gd2hpbGUgYSBkaWZmZXJlbnQgQVNJRCBpcyBsb2FkZWQKPj4g IGludG8ge1x0dCBzYXRwfSwgcHJvdmlkZWQgdGhlIG5leHQgdGltZSB7XHR0IHNhdHB9IGlzIGxv YWRlZCB3aXRoIHRoZSByZWN5Y2xlZAo+PiAgQVNJRCwgaXQgaXMgc2ltdWx0YW5lb3VzbHkgbG9h ZGVkIHdpdGggdGhlIG5ldyBwYWdlIHRhYmxlLgo+Pgo+PiAtXGl0ZW0gSWYgdGhlIGltcGxlbWVu dGF0aW9uIGRvZXMgbm90IHByb3ZpZGUgQVNJRHMsIG9yIHNvZnR3YXJlIGNob29zZXMgdG8KPj4g K1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzIGFuZCBQ UE5zLCBvciBzb2Z0d2FyZSBjaG9vc2VzIHRvCj4+ICBhbHdheXMgdXNlIEFTSUQgMCwgdGhlbiBh ZnRlciBldmVyeSB7XHR0IHNhdHB9IHdyaXRlLCBzb2Z0d2FyZSBzaG91bGQgZXhlY3V0ZQo+PiAg U0ZFTkNFLlZNQSB3aXRoIHtcZW0gcnMxfT17XHR0IHgwfS4gIEluIHRoZSBjb21tb24gY2FzZSB0 aGF0IG5vIGdsb2JhbAo+PiAgdHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSBy czJ9IHNob3VsZCBiZSBzZXQgdG8gYSByZWdpc3RlciBvdGhlciB0aGFuCj4+IEBAIC0xMDAzLDEz ICsxMDkxLDE0IEBAIG5vdCBmbHVzaGVkLgo+Pgo+PiAgXGl0ZW0gSWYgc29mdHdhcmUgbW9kaWZp ZXMgYSBub24tbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlIFNGRU5DRS5WTUEgd2l0aAo+PiAg e1xlbSByczF9PXtcdHQgeDB9LiAgSWYgYW55IFBURSBhbG9uZyB0aGUgdHJhdmVyc2FsIHBhdGgg aGFkIGl0cyBHIGJpdCBzZXQsCj4+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3IKPj4gLXdoaWNoIHRo ZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3tcZW0gcnMyfSBtdXN0IGJlIHtc dHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lEIGFu ZAo+PiArcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gaXMg YmVpbmcgbW9kaWZpZWQuCj4+Cj4+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIGxlYWYg UFRFLCBpdCBzaG91bGQgZXhlY3V0ZSBTRkVOQ0UuVk1BIHdpdGgge1xlbQo+PiAgcnMxfSBzZXQg dG8gYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlLiAgSWYgYW55IFBURSBhbG9uZyB0 aGUgdHJhdmVyc2FsCj4+ICBwYXRoIGhhZCBpdHMgRyBiaXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBi ZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLCB7XGVtIHJzMn0KPj4gLXNob3VsZCBiZSBzZXQgdG8gdGhl IEFTSUQgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3No b3VsZCBiZSBzZXQgdG8gdGhlIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBmb3Igd2hp Y2ggdGhlIHRyYW5zbGF0aW9uCj4+ICtpcyBiZWluZyBtb2RpZmllZC4KPj4KPj4gIFxpdGVtIEZv ciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhIGxl YWYgUFRFIGFuZAo+PiAgY2hhbmdpbmcgYW4gaW52YWxpZCBQVEUgdG8gYSB2YWxpZCBsZWFmLCBz b2Z0d2FyZSBtYXkgY2hvb3NlIHRvIGV4ZWN1dGUKPj4gLS0KPj4gMi43LjQKPj4KPj4KPj4gLT0t PS09LT0tPS09LT0tPS09LT0tPS0KPj4gTGlua3M6IFlvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBz ZW50IHRvIHRoaXMgZ3JvdXAuCj4+Cj4+IFZpZXcvUmVwbHkgT25saW5lICgjODEwKTogaHR0cHM6 Ly9saXN0cy5yaXNjdi5vcmcvZy90ZWNoLXByaXZpbGVnZWQvbWVzc2FnZS84MTAKPj4gTXV0ZSBU aGlzIFRvcGljOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9tdC8zNDE5ODk4Ni8xNjc3MjczCj4+ IEdyb3VwIE93bmVyOiB0ZWNoLXByaXZpbGVnZWQrb3duZXJAbGlzdHMucmlzY3Yub3JnCj4+IFVu c3Vic2NyaWJlOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9nL3RlY2gtcHJpdmlsZWdlZC91bnN1 YiAgW2FuZHJld0BzaWZpdmUuY29tXQo+PiAtPS09LT0tPS09LT0tPS09LT0tPS09LQo+PgoKCi0t IApCZXN0IFJlZ2FyZHMKIEd1byBSZW4KCk1MOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1jc2t5LwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp b21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6 Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 32054C3A5A6 for ; Fri, 20 Sep 2019 00:13:28 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 98724206B6 for ; Fri, 20 Sep 2019 00:13:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="ARio8/iP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 98724206B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 35FAF4A6F7; Thu, 19 Sep 2019 20:13:27 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@kernel.org Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JjyRKBZpVw-b; Thu, 19 Sep 2019 20:13:23 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id C4C9E4A6EA; Thu, 19 Sep 2019 20:13:23 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id CE8FF4A6E8 for ; Thu, 19 Sep 2019 20:13:21 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CQl+X0rCIdcn for ; Thu, 19 Sep 2019 20:13:19 -0400 (EDT) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 1BECB4A535 for ; Thu, 19 Sep 2019 20:13:19 -0400 (EDT) Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A3AB6206B6 for ; Fri, 20 Sep 2019 00:13:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938398; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=ARio8/iPTeDTzHJev/ZtCVsx/Sc8QM769WOnao31YkjCZ7ky53P5K9d/FugFi8NPE XEyONzCfi2gcO7kubI0Q2pyvtJfUyKQMfHz7e/3PeM2ql/6w+gGllHKRwZvRuNmyRS TibBLoHEa9eKLPHxpVgcsVpPOLHACRmbgFfjlyCU= Received: by mail-wr1-f53.google.com with SMTP id r3so4933611wrj.6 for ; Thu, 19 Sep 2019 17:13:17 -0700 (PDT) X-Gm-Message-State: APjAAAXhYsBzIboU7MuJ5pLu7C/V9XUrcyvTafF1OGLPWrmcdH98YP7O oUQZhrrvMAyW+Hwu7IFYDACL04adYM5k9qD3SoU= X-Google-Smtp-Source: APXvYqydI+4EP3dsUrXmWLL5d6kf6TOOLzgdqvDVz56Rpd9MEYS9ZdQysBuqWQS8Yi2tncEfXArIbYtOUMedD24HhZA= X-Received: by 2002:a5d:66d2:: with SMTP id k18mr8973963wrw.7.1568938396076; Thu, 19 Sep 2019 17:13:16 -0700 (PDT) MIME-Version: 1.0 References: <1568896556-28769-1-git-send-email-guoren@kernel.org> In-Reply-To: From: Guo Ren Date: Fri, 20 Sep 2019 08:13:02 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma To: Andrew Waterman Cc: Catalin Marinas , Palmer Dabbelt , Will Deacon , Atish Patra , Julien Grall , gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, Jean-Philippe Brucker , linux-csky@vger.kernel.org, Mike Rapoport , Guo Ren , benh@kernel.crashing.org, jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, Marc Zyngier , linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup Patel , Linux Kernel Mailing List , iommu@lists.linux-foundation.org, dwmw2@infradead.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGksCgpPbiBGcmksIFNlcCAyMCwgMjAxOSBhdCAxMjoxMCBBTSBBbmRyZXcgV2F0ZXJtYW4gPGFu ZHJld0BzaWZpdmUuY29tPiB3cm90ZToKPgo+IFRoaXMgbmVlZHMgdG8gYmUgZGlzY3Vzc2VkIGFu ZCBkZWJhdGVkIGF0IGxlbmd0aDsgcHJvcG9zaW5nIGVkaXRzIHRvIHRoZSBzcGVjIGF0IHRoaXMg c3RhZ2UgaXMgcHV0dGluZyB0aGUgY2FydCBiZWZvcmUgdGhlIGhvcnNlIQpBZ3JlZSA6KQoKPgo+ IFdlIHNob3VsZG7igJl0IGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZXhpc3RpbmcgU0ZF TkNFLlZNQSBpbnN0cnVjdGlvbiB0byBhY2NvbXBsaXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBh YnVuZGFudGx5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBzaG91bGQgYmUgYW4gaW5zdHJ1Y3Rpb246 CklmIHlvdSBpbXBsZW1lbnQgc2ZlbmNlLnZtYSBhcyBjdXJyZW50IGRlZmluZSwgaXQgYWxzbyBj b3VsZCB3b3JrIHdpdGgKbmV3IG1lY2hhbmlzbSwgdGhleSBhcmUgY29tcGF0aWJsZS4KCj4gVExC IHNob290ZG93biBsb29rcyBtb3JlIGxpa2UgTU1JTy4KUGVyLUNQVSBNTUlPID8gSSB0aGUgcHJv cG9zYWwsIGV2ZXJ5IGhhcnQgb25seSB0YWtlcyBjYXJlIG9mIGl0cyBvd24gcmVxdWVzdC4KCgoK Cj4KPiBPbiBUaHUsIFNlcCAxOSwgMjAxOSBhdCA1OjM2IEFNIEd1byBSZW4gPGd1b3JlbkBrZXJu ZWwub3JnPiB3cm90ZToKPj4KPj4gRnJvbTogR3VvIFJlbiA8cmVuX2d1b0BjLXNreS5jb20+Cj4+ Cj4+IFRoZSBwYXRjaCBpcyBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWlzYS1t YW51YWwKPj4KPj4gVGhlIHByb3Bvc2FsIGhhcyBiZWVuIHRhbGtlZCBpbiBMUEMtMjAxOSBSSVND LVYgTUMgcmVmIFsxXS4gSGVyZSBpcyB0aGUKPj4gZm9ybWFsIHBhdGNoLgo+Pgo+PiBJbnRyb2R1 Y3Rpb24KPj4gPT09PT09PT09PT09Cj4+Cj4+IFVzaW5nIHRoZSBIYXJkd2FyZSBUTEIgYnJvYWRj YXN0IGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbiB0byBtYWludGFpbiB0aGUKPj4gc3lzdGVtIFRM QiBpcyBhIGdvb2QgY2hvaWNlIGFuZCBpdCdsbCBzaW1wbGlmeSB0aGUgc3lzdGVtIHNvZnR3YXJl IGRlc2lnbi4KPj4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBtb2RlIHRv IHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+PiByaXNjdi1wcml2aWxlZ2Ugc3BlY2lmaWNhdGlvbi4g VG8gc3VwcG9ydCB0aGUgc2ZlbmNlLnZtYSBicm9hZGNhc3QgbW9kZSwKPj4gdGhlcmUgYXJlIHR3 byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPj4KPj4gIDEpIEFkZCBQR0QuUFBOIChy b290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUKPj4g ICAgIGFkZHJlc3Mgc3BhY2UgaW4gYWRkaXRpb24gdG8gYXNpZC92bWlkLiBDb21wYXJlZCB0byB0 aGUgZHluYW1pY2FsbHkKPj4gICAgIGNoYW5nZWQgYXNpZC92bWlkLCBQR0QuUFBOIGlzIGZpeGVk IHRocm91Z2hvdXQgdGhlIGFkZHJlc3Mgc3BhY2UgbGlmZQo+PiAgICAgY3ljbGUuIFRoaXMgZmVh dHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVzcyBzcGFjZSBpZGVudGlmaWNhdGlvbgo+PiAgICAg YmV0d2VlbiBkaWZmZXJlbnQgVExCIHN5c3RlbXMgKGFjdHVhbGx5LCBpdCdzIGRpZmZpY3VsdCB0 byB1bmlmeSB0aGUKPj4gICAgIGFzaWQvdm1pZCBiZXR3ZWVuIHRoZSBDUFUgc3lzdGVtIGFuZCB0 aGUgSU9NTVUgc3lzdGVtLCBiZWNhdXNlIHRoZWlyCj4+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZm ZXJlbnQpCj4+Cj4+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEg aW5zdHJ1Y3Rpb24gZnJvbSBzeW5jaHJvbm91cwo+PiAgICAgbW9kZSB0byBhc3luY2hyb25vdXMg bW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgVExCCj4+ICAgICBv cGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgd2hlbiB0aGUgc2ZlbmNlLnZtYSBpbnN0cnVjdGlv biByZXRpcmVzLgo+PiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNraW5nIHRo ZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4gVGhlCj4+ICAgICBzZmVuY2Uudm1hIHJlcXVlc3QgZmlu aXNoIGNhbiBub3RpZnkgdGhlIHNvZnR3YXJlIGJ5IGdlbmVyYXRpbmcgYW4KPj4gICAgIGludGVy cnVwdC4gVGhpcyBmdW5jdGlvbiBhbGxldmlhdGVzIHRoZSBsYXJnZSBkZWxheSBvZiBUTEIgaW52 YWxpZGF0aW9uCj4+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0ZW0uCj4+Cj4+IEFkZCBTMS9TMi5Q R0QuUFBOIGZvciBBU0lEL1ZNSUQKPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ Pgo+PiBQR0QgaXMgZ2xvYmFsIGRpcmVjdG9yeSAoZGVmaW5lZCBpbiBsaW51eCkgYW5kIFBQTiBp cyBwYWdlIHBoeXNpY2FsIG51bWJlcgo+PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBO TiBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBwYWdlIHRhYmxlIHBvaW50ZXIKPj4gb2YgdGhlIGFk ZHJlc3Mgc3BhY2UsIGkuZS4gbW0tPnBnZCAobGludXggY29uY2VwdCkuCj4+Cj4+IEluIENQVS9J T01NVSBUTEIsIHdlIHVzZSBhc2lkL3ZtaWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGFkZHJlc3Mgc3Bh Y2Ugb2YKPj4gcHJvY2VzcyBvciB2aXJ0dWFsIG1hY2hpbmUuIER1ZSB0byB0aGUgbGltaXRhdGlv biBvZiBpZCBlbmNvZGluZywgaXQgY2FuCj4+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cp IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOIGFyZSB0aGUKPj4gcm9vdCBwYWdl IHRhYmxlJ3MgUFBOcyBvZiB0aGUgYWRkcmVzcyBzcGFjZXMgYW5kIFMxL1MyLlBHRC5QUE4gYXJl IHRoZQo+PiB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWRkcmVzcyBzcGFjZXMuCj4+Cj4+IEZv ciB0aGUgQ1BVIFNNUCBzeXN0ZW0sIHlvdSBjYW4gdXNlIGNvbnRleHQgc3dpdGNoIHRvIHBlcmZv cm0gdGhlIG5lY2Vzc2FyeQo+PiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgdGhl IGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMgY29uc2lzdGVudAo+PiAocGxlYXNlIHJlZmVyIHRv IHRoZSBhcm02NCBhc2lkIG1lY2hhbmlzbSkuIEluIHRoaXMgd2F5LCB0aGUgVExCIGJyb2FkY2Fz dAo+PiBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gY2FuIGRldGVybWluZSB0aGUgYWRkcmVzcyBz cGFjZSBwcm9jZXNzZWQgb24gYWxsCj4+IGhhcnRzIGJ5IGFzaWQvdm1pZC4KPj4KPj4gRGlmZmVy ZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVtLCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBm b3IgdGhlCj4+IERNQS1JT01NVSBzeXN0ZW0sIHNvIHRoZSB1bmlmaWNhdGlvbiB3aXRoIHRoZSBD UFUgYXNpZC92bWlkIGNhbm5vdCBiZQo+PiBndWFyYW50ZWVkLiBTbyB3ZSBuZWVkIGEgdW5pcXVl IGlkZW50aWZpZXIgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIHRvCj4+IGVzdGFibGlzaCBhIGNvbW11 bmljYXRpb24gYnJpZGdlIGJldHdlZW4gdGhlIFRMQnMgb2YgZGlmZmVyZW50IHN5c3RlbXMuCj4+ Cj4+IFRoYXQgaXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIu UEdELlBQTikKPj4KPj4gY3VycmVudDoKPj4gIHNmZW5jZS52bWEgIHJzMSA9IHZhZGRyLCByczIg PSBhc2lkCj4+ICBoZmVuY2UudnZtYSByczEgPSB2YWRkciwgcnMyID0gYXNpZAo+PiAgaGZlbmNl Lmd2bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPj4KPj4gcHJvcG9zZWQ6Cj4+ICBzZmVuY2Uu dm1hICByczEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+PiAgaGZlbmNlLnZ2bWEgcnMx ID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPj4gIGhmZW5jZS5ndm1hIHJzMSA9IGdhZGRy LCByczIgPSBtb2RlOnBwbjp2bWlkCj4+Cj4+ICBtb2RlICAgICAgLSBicm9hZGNhc3QgfCBsb2Nh bAo+PiAgcHBuICAgICAgIC0gdGhlIFBQTiBvZiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgcm9v dCBwYWdlIHRhYmxlCj4+ICB2bWlkL2FzaWQgLSB0aGUgd2luZG93IGlkZW50aWZpZXIgb2YgdGhl IGFkZHJlc3Mgc3BhY2UKPj4KPj4gQXQgdGhlIExpbnV4IFBsdW1iZXIgQ29uZmVyZW5jZSAyMDE5 IFJJU0NWLU1DLCByZWY6WzFdLCB3ZSd2ZSBzaG93ZWQgdHdvCj4+IElPTU1VIGV4YW1wbGVzIHRv IGV4cGxhaW4gaG93IGl0IHdvcmsgd2l0aCBoYXJkd2FyZS4KPj4KPj4gMSkgSW4gYSBsaWdodHdl aWdodCBJT01NVSBzeXN0ZW0gKHVwIHRvIDY0IGFkZHJlc3Mgc3BhY2VzKSwgdGhlIGhhcmR3YXJl Cj4+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdELlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJ RCkKPj4KPj4gMikgRm9yIHRoZSBQQ0kgQVRTIHNjZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVu Y29kaW5nIHNwYWNlIGNhbiBzdXBwb3J0Cj4+ICAgIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgYWRk cmVzcyBzcGFjZXMuIFdlIHVzZSB0d28gcmV2ZXJzZSBtYXBwaW5nCj4+ICAgIHRhYmxlcyB0byBs ZXQgdGhlIGhhcmR3YXJlIHRyYW5zbGF0ZSBTMS9TMi5QR0QuUFBOIGludG8gSU8gQVNJRC9WTUlE Lgo+Pgo+PiBBU1lOQyBCUk9BRENBU1QgU0ZFTkNFLlZNQQo+PiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPj4KPj4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVu Y2Uudm1hIG9wZXJhdGlvbiBpbiB0aGUgUENJIEFUUwo+PiB1c2FnZSBzY2VuYXJpbywgd2UgbW9k aWZ5IHRoZSBzZmVuY2Uudm1hIGZyb20gc3luY2hyb25vdXMgbW9kZSB0bwo+PiBhc3luY2hyb25v dXMgbW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5IGlt cGxlbWVudAo+PiBzeW5jaHJvbm91cyBtb2RlIGFuZCBzb2Z0d2FyZSBzdGlsbCB3b3JrIGluIGFz eW5jaHJvbm91cyBtb2RlKQo+Pgo+PiBUbyBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBtb2Rl LCAzIGZlYXR1cmVzIGFyZSBhZGRlZDoKPj4gIDEpIHNzdGF0dXM6VExCSQo+PiAgICAgQSAic3Rh dHVzIGJpdCAtIFRMQkkiIGlzIGFkZGVkIHRvIHRoZSBzc3RhdHVzIHJlZ2lzdGVyLiBUaGUgVExC SSBzdGF0dXMKPj4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5k aW5nIHNmZW5jZS52bWEgcmVxdWVzdHMgb24gdGhlCj4+ICAgICBjdXJyZW50IGhhcnQuCj4+ICAg ICBWYWx1ZToKPj4gICAgICAgMTogc2ZlbmNlLnZtYSByZXF1ZXN0cyBhcmUgbm90IGNvbXBsZXRl ZC4KPj4gICAgICAgMDogYWxsIHNmZWNlLnZtYSByZXF1ZXN0cyBjb21wbGV0ZWQsIHJlcXVlc3Qg cXVldWUgaXMgZW1wdHkuCj4+Cj4+ICAyKSBzc3RhdHVzOlRMQklDCj4+ICAgICBBICJjb250cm9s IGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1cyByZWdpc3Rlci4gVGhlIFRMQklDIGNv bnRyb2wKPj4gICAgIGJpdHMgYXJlIGNvbnRyb2xsZWQgYnkgc29mdHdhcmUuCj4+ICAgICAiV3Jp dGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJyZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJl IGFyZSBzdGlsbAo+PiAgICAgb3V0c3RhbmRpbmcgc2ZlbmNlLnZtYSByZXF1ZXN0cy4gSWYgdGhl cmUgYXJlIHVuZmluaXNoZWQgcmVxdWVzdHMsIGFuCj4+ICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBn ZW5lcmF0ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIG5vdGlmeWluZyB0aGUKPj4g ICAgIHNvZnR3YXJlIHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMg aGF2ZSBiZWVuIGNvbXBsZXRlZC4KPj4gICAgICJXcml0ZSAwIiB3aWxsIGNhdXNlIG5vdGhpbmcu Cj4+Cj4+ICAzKSBzdXBlcnZpc29yIGludGVycnVwdCByZWdpc3RlciAoc2lwICYgc2llKTpUTEJJ IGZpbmlzaCBpbnRlcnJ1cHQKPj4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRv IHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVycy4KPj4gICAgIFdoZW4gYWxsIHNmZW5jZS52 bWEgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBhbmQgc3N0YXR1czpUTEJJQyBoYXMgYmVlbgo+PiAg ICAgdHJpZ2dlcmVkLCBoYXJ0IHdpbGwgcmVjZWl2ZSBhIFRMQkkgZmluaXNoIGludGVycnVwdC4g SnVzdCBsaWtlIHRpbWVyLAo+PiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFsIGludGVycnVwdCdz IGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+Pgo+PiBGYWtlIGNvZGU6Cj4+Cj4+IGZsdXNoX3Rs Yl9wYWdlKHZtYSwgYWRkcikgewo+PiAgICAgYXNpZCA9IGNwdV9hc2lkKHZtYS0+dm1fbW0pOwo+ PiAgICAgcHBuID0gUEZOX0RPV04odm1hLT52bV9tbS0+cGdkKTsKPj4KPj4gICAgIHNmZW5jZS52 bWEgKGFkZHIsIDF8UFBOX09GRlNFVChwcG4pfGFzaWQpOyAvLzEuIHN0YXJ0IHJlcXVlc3QKPj4K Pj4gICAgIHdoaWxlKHNzdGF0dXM6VExCSSkgaWYgKHRpbWVfb3V0KCkgPiAxbXMpIGJyZWFrOyAv LzIuIGxvb3AgY2hlY2sKPj4KPj4gICAgIHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPj4gICAgICAg ICAuLi4KPj4gICAgICAgICBzZXQgc3N0YXR1czpUTEJJQzsKPj4gICAgICAgICB3YWl0X1RMQklf ZmluaXNoX2ludGVycnVwdCgpOyAvLzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+PiAgICAgfQo+ PiB9Cj4+Cj4+IEhlcmUgd2UgZ2l2ZSAyIGxldmVsIGNoZWNrOgo+PiAgMSkgbG9vcCBjaGVjayBz c3RhdHVzOlRMQkksIENQVSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4+ICAyKSBzZXQgc3N0 YXR1czpUTEJJQyBhbmQgd2FpdCBmb3IgaXJxLCBDUFUgc2NoZWR1bGUgb3V0IGZvciBvdGhlciB0 YXNrLgo+Pgo+PiBBQ0UtRFZNIEV4YW1wbGUKPj4gPT09PT09PT09PT09PT09Cj4+Cj4+IEhvbmVz dGx5LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8gaW50 ZXJjb25uZWN0cyIKPj4gYW5kICJBU1lOQyBTRkVOQ0UuVk1BIiBjb3VsZCBiZSBpbXBsZW1lbnRl ZCBieSBBQ0UtRFZNIHByb3RvY29sIHJlZiBbMl0uCj4+Cj4+IFRoZXJlIGFyZSAzIHR5cGVzIG9m IHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4+Cj4+ICAtIERWTSBvcGVyYXRpb24KPj4gICAgU2VuZCBh bGwgaW5mb3JtYXRpb24gdG8gdGhlIGludGVyY29ubmVjdCwgaW5jbHVkaW5nIGFkZHIsIGFzaWQs Cj4+ICAgIFMxLlBHRC5QUE4sIHZtaWQsIFMyLlBHRC5QUE4uCj4+Cj4+ICAtIERWTSBzeW5jaHJv bml6YXRpb24KPj4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIGNv bXBsZXRlZC4gSWYgbm90LCBpdCB3aWxsIHVzZQo+PiAgICBzdGF0ZSBtYWNoaW5lIHRvIHdhaXQg RFZNIGNvbXBsZXRlIHJlcXVlc3RzLgo+Pgo+PiAgLSBEVk0gY29tcGxldGUKPj4gICAgUmV0dXJu IHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywgZWc6IElPTU1VLiBJZiBoYXJ0IGhhcyByZWNl aXZlZCBhbGwKPj4gICAgRFZNIGNvbXBsZXRlcyB3aGljaCBhcmUgdHJpZ2dlcmVkIGJ5IHNmZW5j ZS52bWEgaW5zdHJ1Y3Rpb25zIGFuZAo+PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0 LCBhIFRMQkkgZmluaXNoIGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCj4+Cj4+IChBY3R1YWxseSwg d2UgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBmdW5jdGlvbnMgc3RyaWN0bHkK Pj4gIGFjY29yZGluZyB0byB0aGUgQUNFIHNwZWNpZmljYXRpb24gOlAgKQo+Pgo+PiAgMTogaHR0 cHM6Ly93d3cubGludXhwbHVtYmVyc2NvbmYub3JnL2V2ZW50LzQvY29udHJpYnV0aW9ucy8zMDcv Cj4+ICAyOiBBTUJBIEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmli dXRlZCBWaXJ0dWFsIE1lbW9yeQo+PiAgICAgVHJhbnNhY3Rpb25zIgo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPj4gUmV2aWV3ZWQtYnk6IExpIEZlaXRl bmcgPGZlaXRlbmdfbGlAYy1za3kuY29tPgo+PiAtLS0KPj4gIHNyYy9oeXBlcnZpc29yLnRleCB8 ICA0MyArKysrKysrKy0tLS0tLS0KPj4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgMiBmaWxl cyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvaHlwZXJ2aXNvci50ZXggYi9zcmMvaHlwZXJ2aXNvci50ZXgKPj4gaW5kZXgg NDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPj4gLS0tIGEvc3JjL2h5cGVydmlzb3IudGV4Cj4+ICsr KyBiL3NyYy9oeXBlcnZpc29yLnRleAo+PiBAQCAtMTA5NCwxNSArMTA5NCwxNSBAQCBUaGUgaHlw ZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3IHByaXZpbGVnZWQgZmVuY2UgaW5zdHJ1Y3Rp b25zLgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtvcGNvZGV9IFxcCj4+ICBcaGxpbmUKPj4gIDcg JiA1ICYgNSAmIDMgJiA1ICYgNyBcXAo+PiAtSEZFTkNFLkdWTUEgJiB2bWlkICYgZ2FkZHIgJiBQ UklWICYgMCAmIFNZU1RFTSBcXAo+PiAtSEZFTkNFLlZWTUEgJiBhc2lkICYgdmFkZHIgJiBQUklW ICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLkdWTUEgJiBtb2RlOnBwbjp2bWlkICYgZ2FkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLlZWTUEgJiBtb2RlOnBwbjphc2lkICYg dmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+ICBUaGUgaHlwZXJ2aXNvciBtZW1vcnktbWFuYWdlbWVudCBmZW5jZSBpbnN0 cnVjdGlvbnMsIEhGRU5DRS5HVk1BIGFuZAo+PiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5 IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1zdGF0dXN9LlRWTT0wLCBvciBpbiBNLW1vZGUKPj4gIChp cnJlc3BlY3RpdmUgb2Yge1x0dCBtc3RhdHVzfS5UVk0pLgo+PiAtVGhlc2UgaW5zdHJ1Y3Rpb25z IHBlcmZvcm0gYSBmdW5jdGlvbiBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPj4gK1RoZXNlIGluc3Ry dWN0aW9ucyBwZXJmb3JtIGEgZnVuY3Rpb24gc2ltaWxhciB0byBTRkVOQ0UuVk1BIChicm9hZGNh c3QvbG9jYWwpCj4+ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBs eWluZyB0byB0aGUgZ3Vlc3QtcGh5c2ljYWwKPj4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3Ry dWN0dXJlcyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfSAoSEZFTkNFLkdWTUEpCj4+ICBv ciB0aGUgVlMtbGV2ZWwgbWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRyb2xs ZWQgYnkgQ1NSIHtcdHQgdnNhdHB9Cj4+IEBAIC0xMTM2LDExICsxMTM2LDEwIEBAIEFuIEhGRU5D RS5WVk1BIGluc3RydWN0aW9uIGFwcGxpZXMgb25seSB0byBhIHNpbmdsZSB2aXJ0dWFsIG1hY2hp bmUsIGlkZW50aWZpZWQKPj4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9LlZNSUQgd2hl biBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPj4gIFxlbmR7Y29tbWVudGFyeX0KPj4KPj4gLVdoZW4g e1xlbSByczJ9JFxuZXEke1x0dCB4MH0sIGJpdHMgWExFTi0xOkFTSURNQVggb2YgdGhlIHZhbHVl IGhlbGQgaW4ge1xlbQo+PiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUgYW5kIGlnbm9yZWQKPj4gLWJ5IGN1cnJlbnQgaW1w bGVtZW50YXRpb25zLgo+PiAtRnVydGhlcm1vcmUsIGlmIEFTSURMRU5+JDwkfkFTSURNQVgsIHRo ZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUgYml0cwo+PiAtQVNJRE1BWC0xOkFTSURMRU4g b2YgdGhlIHZhbHVlIGhlbGQgaW4ge1xlbSByczJ9Lgo+PiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7 XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLCBwcG4sIGFzaWQuCj4+ ICsxKSBtb2RlIGNvbnRyb2wgSEZFTkNFLlZWTUEgYnJvYWRjYXN0IG9yIG5vdC4KPj4gKzIpIHBw biBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2Uu Cj4+ICszKSBhc2lkIGlzIHRoZSBpZGVudGlmaWVyIG9mIHByb2Nlc3MgaW4gdmlydHVhbCBtYWNo aW5lLgo+Pgo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9u cyBvZiBIRkVOQ0UuVlZNQSBjYW4gaWdub3JlIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW4K Pj4gQEAgLTExNjgsMTEgKzExNjcsMTAgQEAgcGh5c2ljYWwgYWRkcmVzc2VzIGluIFBNUCBhZGRy ZXNzIHJlZ2lzdGVycyAoU2VjdGlvbn5ccmVme3NlYzpwbXB9KSBhbmQgaW4gcGFnZQo+PiAgdGFi bGUgZW50cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LCBhbmR+ XHJlZntzZWM6c3Y0OH0pLgo+PiAgXGVuZHtjb21tZW50YXJ5fQo+Pgo+PiAtV2hlbiB7XGVtIHJz Mn0kXG5lcSR7XHR0IHgwfSwgYml0cyBYTEVOLTE6Vk1JRE1BWCBvZiB0aGUgdmFsdWUgaGVsZCBp biB7XGVtCj4+IC1yczJ9IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hvdWxkIGJl IHplcm9lZCBieSBzb2Z0d2FyZSBhbmQgaWdub3JlZAo+PiAtYnkgY3VycmVudCBpbXBsZW1lbnRh dGlvbnMuCj4+IC1GdXJ0aGVybW9yZSwgaWYgVk1JRExFTn4kPCR+Vk1JRE1BWCwgdGhlIGltcGxl bWVudGF0aW9uIHNoYWxsIGlnbm9yZSBiaXRzCj4+IC1WTUlETUFYLTE6Vk1JRExFTiBvZiB0aGUg dmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4+ICtXaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9 LCBiaXRzIGNvbnRhaW4gMyBpbmZvcm1hdGlvbnM6IG1vZGUsIHZtaWQsIHBwbi4KPj4gKzEpIG1v ZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+PiArMikgcHBuIGlzIHRo ZSByb290IHBhZ2UgdGFsYmUncyBQUE4gb2YgdGhlIHZtaWQgYWRkcmVzcyBzcGFjZS4KPj4gKzMp IHZtaWQgaXMgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBtYWNoaW5lLgo+Pgo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBj YW4gaWdub3JlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGluCj4+IEBAIC0xNTY3LDIxICsx NTY1LDIyIEBAIHJlZ2lzdGVyLgo+PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVu Y2VzfQo+Pgo+PiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlz IGFmZmVjdGVkIGJ5IHRoZSBjdXJyZW50Cj4+IC12aXJ0dWFsaXphdGlvbiBtb2RlIFYuICBXaGVu IFY9MCwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCBpcyBhbiBIUy1sZXZlbAo+PiAtdmly dHVhbCBhZGRyZXNzLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYW4gSFMtbGV2ZWwgQVNJRC4K Pj4gK3ZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgcnMxIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsCj4+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTi4KPj4gIFRoZSBpbnN0 cnVjdGlvbiBvcmRlcnMgc3RvcmVzIG9ubHkgdG8gSFMtbGV2ZWwgYWRkcmVzcy10cmFuc2xhdGlv biBzdHJ1Y3R1cmVzCj4+ICB3aXRoIHN1YnNlcXVlbnQgSFMtbGV2ZWwgYWRkcmVzcyB0cmFuc2xh dGlvbnMuCj4+Cj4+IC1XaGVuIFY9MSwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCB0byBT RkVOQ0UuVk1BIGlzIGEgZ3Vlc3QgdmlydHVhbAo+PiAtYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJl bnQgdmlydHVhbCBtYWNoaW5lLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYSBWUy1sZXZlbAo+ PiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5lLgo+PiArV2hlbiBWPTEs IHRoZSByczEgYXJndW1lbnQgdG8gU0ZFTkNFLlZNQSBpcyBhIGd1ZXN0IHZpcnR1YWwKPj4gK2Fk ZHJlc3Mgd2l0aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSByczIgYXJn dW1lbnQgaXMgYSBWUy1sZXZlbAo+PiArQVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHdp dGhpbiB0aGUgY3VycmVudCB2aXJ0dWFsIG1hY2hpbmUuCj4+ICBUaGUgY3VycmVudCB2aXJ0dWFs IG1hY2hpbmUgaXMgaWRlbnRpZmllZCBieSB0aGUgVk1JRCBmaWVsZCBvZiBDU1Ige1x0dCBoZ2F0 cH0sCj4+IC1hbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHRo ZSBjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQKPj4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4+ ICthbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gY2FuIGJl IGNvbnNpZGVyZWQgdG8gYmUgdGhlCj4+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJv b3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoIHRoZSBWUy1sZXZlbCBBU0lEIGFuZAo+PiArcm9vdCBw YWdlIHRhYmxlJ3MgUFBOLgo+PiAgVGhlIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24gb3JkZXJzIHN0 b3JlcyBvbmx5IHRvIHRoZSBWUy1sZXZlbAo+PiAgYWRkcmVzcy10cmFuc2xhdGlvbiBzdHJ1Y3R1 cmVzIHdpdGggc3Vic2VxdWVudCBWUy1sZXZlbCBhZGRyZXNzIHRyYW5zbGF0aW9ucwo+PiAtZm9y IHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdhdHB9LlZN SUQgaXMgdGhlIHNhbWUgYXMKPj4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4+ICtm b3IgdGhlIHNhbWUgdmlydHVhbCBtYWNoaW5lLCBpLmUuLCBvbmx5IHdoZW4ge1x0dCBoZ2F0cH0u Vk1JRCBhbmQge1xcdHQgaGdhdHB9LlBQTiBpcwo+PiArdGhlIHNhbWUgYXMgd2hlbiB0aGUgU0ZF TkNFLlZNQSBleGVjdXRlZC4KPj4KPj4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rpb25zIEhGRU5DRS5H Vk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlIGFkZGl0aW9uYWwKPj4gIG1lbW9yeS1tYW5hZ2Vt ZW50IGZlbmNlcyB0byBjb21wbGVtZW50IFNGRU5DRS5WTUEuCj4+IGRpZmYgLS1naXQgYS9zcmMv c3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPj4gaW5kZXggYmEzY2VkNS4uMjg3 N2I3YSAxMDA2NDQKPj4gLS0tIGEvc3JjL3N1cGVydmlzb3IudGV4Cj4+ICsrKyBiL3NyYy9zdXBl cnZpc29yLnRleAo+PiBAQCAtNDcsMTAgKzQ3LDEyIEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9m IHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxiZWdpbntjZW50 ZXJ9Cj4+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gIFxzY2FsZWJveHswLjk1fXsK Pj4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2NjV2NjY2NXY2N9Cj4+ICtcYmVnaW57dGFidWxhcn17 Y2NjV2NjY2NjV2NjY2NXY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7MzF9ICYKPj4gLVxpbnN0Yml0 cmFuZ2V7MzB9ezIwfSAmCj4+ICtcaW5zdGJpdHszMH0gJgo+PiArXGluc3RiaXR7Mjl9ICYKPj4g K1xpbnN0Yml0cmFuZ2V7Mjh9ezIwfSAmCj4+ICBcaW5zdGJpdHsxOX0gJgo+PiAgXGluc3RiaXR7 MTh9ICYKPj4gIFxpbnN0Yml0ezE3fSAmCj4+IEBAIC02Niw2ICs2OCw4IEBAIHJlZ2lzdGVyIGtl ZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4g IFxpbnN0Yml0ezB9IFxcCj4+ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8 fXtUTEJJQ30gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29s dW1uezF9e2N8fXtNWFJ9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1VNfSAmCj4+IEBAIC04 Miw3ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJy ZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9Cj4+ICBc XAo+PiAgXGhsaW5lCj4+IC0xICYgMTEgJiAxICYgMSAmIDEgJiAyICYgMiAmIDQgJiAxICYgMSAm IDEgJiAxICYgMyAmIDEgJiAxIFxcCj4+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYgMSAmIDIg JiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn19 Cj4+ICBcZW5ke2NlbnRlcn0KPj4gIH0KPj4gQEAgLTk1LDEwICs5OSwxMiBAQCByZWdpc3RlciBr ZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUuCj4+ ICB7XGZvb3Rub3Rlc2l6ZQo+PiAgXGJlZ2lue2NlbnRlcn0KPj4gIFxzZXRsZW5ndGh7XHRhYmNv bHNlcH17NHB0fQo+PiAtXGJlZ2lue3RhYnVsYXJ9e2NNRlNjY2NjfQo+PiArXGJlZ2lue3RhYnVs YXJ9e2NjY01GU2NjY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7U1hMRU4tMX0gJgo+PiAtXGluc3Ri aXRyYW5nZXtTWExFTi0yfXszNH0gJgo+PiArXGluc3RiaXR7U1hMRU4tMn0gJgo+PiArXGluc3Ri aXR7U1hMRU4tM30gJgo+PiArXGluc3RiaXRyYW5nZXtTWExFTi00fXszNH0gJgo+PiAgXGluc3Ri aXRyYW5nZXszM317MzJ9ICYKPj4gIFxpbnN0Yml0cmFuZ2V7MzF9ezIwfSAmCj4+ICBcaW5zdGJp dHsxOX0gJgo+PiBAQCAtMTA3LDYgKzExMyw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRo ZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gICBcXAo+PiAgXGhsaW5l Cj4+ICBcbXVsdGljb2x1bW57MX17fGN8fXtTRH0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 VExCSX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPj4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17VVhMWzE6MF19ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9ICYKPj4gQEAgLTExNSw3ICsxMjMsNyBAQCByZWdp c3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3Rh dGUuCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICAgXFwKPj4gIFxobGluZQo+ PiAtMSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gKzEgJiAxICYgMSAm IFNYTEVOLTM3ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPj4gIFxcCj4+IEBAIC0xNTIsNiArMTYwLDE3 IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJh dGluZyBzdGF0ZS4KPj4gIFxsYWJlbHtzc3RhdHVzcmVnfQo+PiAgXGVuZHtmaWd1cmUqfQo+Pgo+ PiArVGhlIFRMQkkgKHJlYWQtb25seSkgYml0IGluZGljYXRlcyB0aGF0IGFueSBhc3luYyBzZmVu Y2Uudm1hIG9wZXJhdGlvbnMgYXJlCj4+ICtzdGlsbCBwZW5kZWQgb24gdGhlIGhhcnQuIFRoZSB2 YWx1ZTowIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2ZlbmNlLnZtYQo+PiArb3BlcmF0aW9ucyBw ZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHNmZW5jZS52bWEg b3BlcmF0aW9ucwo+PiArcGVuZGluZyBvbiB0aGUgaGFydC4KPj4gKwo+PiArV2hlbiB0aGUgc3N0 YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAxLCBpdCB0cmlnZ2VycyB0aGUgaGFyZHdhcmUgdG8g Y2hlY2sgaWYKPj4gK3RoZXJlIGFyZSBhbnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWlu ZyBwZW5kZWQuIFdoZW4gYWxsIG9wZXJhdGlvbnMgYXJlCj4+ICtmaW5pc2hlZCwgYSBUTEIgSW52 YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkCj4+ICsoc2VlIFNlY3Rp b25+XHJlZntzaXByZWd9KS4gV2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAw LCBpdCB3aWxsCj4+ICtjYXVzZSBub3RoaW5nLiBSZWFkaW5nIHNzdGF0dXM6VExCSUMgYml0IHdp bGwgYWxhd2F5cyByZXR1cm4gMC4KPj4gKwo+PiAgVGhlIFNQUCBiaXQgaW5kaWNhdGVzIHRoZSBw cml2aWxlZ2UgbGV2ZWwgYXQgd2hpY2ggYSBoYXJ0IHdhcyBleGVjdXRpbmcgYmVmb3JlCj4+ICBl bnRlcmluZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNl dCB0byAwIGlmIHRoZSB0cmFwCj4+ICBvcmlnaW5hdGVkIGZyb20gdXNlciBtb2RlLCBvciAxIG90 aGVyd2lzZS4gIFdoZW4gYW4gU1JFVCBpbnN0cnVjdGlvbgo+PiBAQCAtMzI5LDggKzM0OCwxMCBA QCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBjb250YWluaW5nIGludGVycnVwdCBlbmFi bGUgYml0cy4KPj4gIHtcZm9vdG5vdGVzaXplCj4+ICBcYmVnaW57Y2VudGVyfQo+PiAgXHNldGxl bmd0aHtcdGFiY29sc2VwfXs0cHR9Cj4+IC1cYmVnaW57dGFidWxhcn17S2NGY0ZjY30KPj4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPj4gK1xiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNGY2N9 Cj4+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4+ICtcaW5zdGJpdHsxM30gJgo+PiAr XGluc3RiaXRyYW5nZXsxMn17MTB9ICYKPj4gIFxpbnN0Yml0ezl9ICYKPj4gIFxpbnN0Yml0cmFu Z2V7OH17Nn0gJgo+PiAgXGluc3RiaXR7NX0gJgo+PiBAQCAtMzM5LDYgKzM2MCw4IEBAIFNYTEVO LWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcgaW50ZXJydXB0IGVuYWJsZSBiaXRz Lgo+PiAgXGluc3RiaXR7MH0gXFwKPj4gIFxobGluZQo+PiAgXG11bHRpY29sdW1uezF9e3xjfH17 XHdwcml9ICYKPj4gK1xtdWx0aWNvbHVtbnsxfXtjfH17U1RMQklQfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17fGN8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTRUlQfSAmCj4+ICBc bXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9 ICYKPj4gQEAgLTM0Niw3ICszNjksNyBAQCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBj b250YWluaW5nIGludGVycnVwdCBlbmFibGUgYml0cy4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17 U1NJUH0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGluZQo+PiAt U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYgMSAmIDMg JiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxlbmR7Y2Vu dGVyfQo+PiAgfQo+PiBAQCAtMzU5LDggKzM4MiwxMCBAQCBTWExFTi0xMCAmIDEgJiAzICYgMSAm IDMgJiAxICYgMSBcXAo+PiAge1xmb290bm90ZXNpemUKPj4gIFxiZWdpbntjZW50ZXJ9Cj4+ICBc c2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ PiAtXGluc3RiaXRyYW5nZXtTWExFTi0xfXsxMH0gJgo+PiArXGJlZ2lue3RhYnVsYXJ9e0tjRmNG Y0ZjY30KPj4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPj4gK1xpbnN0Yml0ezEzfSAm Cj4+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+PiAgXGluc3RiaXR7OX0gJgo+PiAgXGluc3Ri aXRyYW5nZXs4fXs2fSAmCj4+ICBcaW5zdGJpdHs1fSAmCj4+IEBAIC0zNjksNiArMzk0LDggQEAg U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxpbnN0Yml0ezB9IFxcCj4+ ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17Y3x9e1NUTEJJRX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17XHdwcml9ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3By aX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTVElFfSAmCj4+IEBAIC0zNzYsNyArNDAzLDcg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxtdWx0aWNvbHVtbnsx fXtjfH17U1NJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGlu ZQo+PiAtU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYg MSAmIDMgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxl bmR7Y2VudGVyfQo+PiAgfQo+PiBAQCAtNDEwLDYgKzQzNywxMiBAQCB3aGVuIHRoZSBTRUlFIGJp dCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzIGNsZWFyLiAgVGhlIGltcGxlbWVudGF0aW9u Cj4+ICBzaG91bGQgcHJvdmlkZSBmYWNpbGl0aWVzIHRvIG1hc2ssIHVubWFzaywgYW5kIHF1ZXJ5 IHRoZSBjYXVzZSBvZiBleHRlcm5hbAo+PiAgaW50ZXJydXB0cy4KPj4KPj4gK0Egc3VwZXJ2aXNv ci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IGlzIHBlbmRpbmcgaWYgdGhl IFNUTEJJUCBiaXQKPj4gK2luIHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2 aXNvci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2gKPj4gK2ludGVycnVwdHMgYXJlIGRpc2Fi bGVkIHdoZW4gdGhlIFNUTEJJRSBiaXQgaW4gdGhlIHtcdHQgc2llfSByZWdpc3RlciBpcyBjbGVh ci4KPj4gK1doZW4gaGFydCB0bGIgaW52YWxpZGF0ZSBvcGVyYXRpb25zIGFyZSBmaW5pc2hlZCwg aGFyZHdhcmUgd2lsbCBjaGFuZ2Ugc3N0YXR1czpUTEJJCj4+ICtiaXQgZnJvbSAxIHRvIDAgYW5k IHRyaWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPj4gKwo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0gYW5kIHtcdHQKPj4gIG1pZX0gcmVnaXN0ZXJzLiAg UmVhZGluZyBhbnkgZmllbGQsIG9yIHdyaXRpbmcgYW55IHdyaXRhYmxlIGZpZWxkLCBvZiB7XHR0 Cj4+IEBAIC01OTgsNyArNjMxLDkgQEAgc28gaXMgb25seSBndWFyYW50ZWVkIHRvIGhvbGQgc3Vw cG9ydGVkIGV4Y2VwdGlvbiBjb2Rlcy4KPj4gICAgMSAgICAgICAgICYgNSAgICAgICAgICAgICAg ICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPj4gICAgMSAgICAgICAgICYgNi0tOCAg ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAgICAgICAgICYgOSAgICAgICAg ICAgICAgICYgU3VwZXJ2aXNvciBleHRlcm5hbCBpbnRlcnJ1cHQgXFwKPj4gLSAgMSAgICAgICAg ICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYg MTAtLTExICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYgMTIg ICAgICAgICAgICAgICYgU3VwZXJ2aXNvciBUTEJJIGZpbmlzaCBpbnRlcnJ1cHQgXFwKPj4gKyAg MSAgICAgICAgICYgMTMtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAg ICAgICAgICYgJFxnZSQxNiAgICAgICAgICYge1xlbSBBdmFpbGFibGUgZm9yIHBsYXRmb3JtIHVz ZX0gXFwgXGhsaW5lCj4+ICAgIDAgICAgICAgICAmIDAgICAgICAgICAgICAgICAmIEluc3RydWN0 aW9uIGFkZHJlc3MgbWlzYWxpZ25lZCBcXAo+PiAgICAwICAgICAgICAgJiAxICAgICAgICAgICAg ICAgJiBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgXFwKPj4gQEAgLTg4NCw3ICs5MTksNyBAQCBw cm92aWRlZC4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17b3Bjb2RlfSBcXAo+PiAgXGhsaW5lCj4+ ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPj4gLVNGRU5DRS5WTUEgJiBhc2lkICYgdmFkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArU0ZFTkNFLlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2 YWRkciAmIExPQ0FMICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+IEBAIC04OTksMjEgKzkzNCw3MCBAQCBmcm9tIHRoYXQgaGFydCB0byB0aGUg bWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzLgo+PiAgRnVydGhlciBkZXRhaWxzIG9u IHRoZSBiZWhhdmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+PiAgZGVzY3JpYmVkIGluIFNl Y3Rpb25+XHJlZnt2aXJ0LWNvbnRyb2x9IGFuZCBTZWN0aW9uflxyZWZ7cG1wLXZtZW19Lgo+Pgo+ PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLCB3aGljaCBtZWFucwo+PiArdGhhdCB0aGUgVExCIG9wZXJhdGlvbiBpcyBub3Qg Z3VhcmFudGVlZCB0byBjb21wbGV0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiByZXRpcmVzLgo+PiAr U29mdHdhcmUgbmVlZCBjaGVjayBzc3RhdHVzOlRMQkkgdG8gZGV0ZXJtaW5lIGFsbCBUTEIgb3Bl cmF0aW9ucyBjb21wbGV0ZS4KPj4gK1RoZSBzc3RhdHVzOlRMQkkgZGVzY3JpYmVkIGluIFNlY3Rp b25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZSBjaGFuZ2UKPj4gK3NzdGF0dXM6VExCSSBi aXQgZnJvbSAxIHRvIDAsIHRoZSBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwg YmUKPj4gK3RyaWdnZXJlZC4KPj4gKwo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+IC1UaGUgU0ZF TkNFLlZNQSBpcyB1c2VkIHRvIGZsdXNoIGFueSBsb2NhbCBoYXJkd2FyZSBjYWNoZXMgcmVsYXRl ZCB0bwo+PiArVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3Rl IGhhcmR3YXJlIGNhY2hlcyByZWxhdGVkIHRvCj4+ICBhZGRyZXNzIHRyYW5zbGF0aW9uLiAgSXQg aXMgc3BlY2lmaWVkIGFzIGEgZmVuY2UgcmF0aGVyIHRoYW4gYSBUTEIKPj4gIGZsdXNoIHRvIHBy b3ZpZGUgY2xlYW5lciBzZW1hbnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoIGluc3RydWN0aW9u cwo+PiAgYXJlIGFmZmVjdGVkIGJ5IHRoZSBmbHVzaCBvcGVyYXRpb24gYW5kIHRvIHN1cHBvcnQg YSB3aWRlciB2YXJpZXR5IG9mCj4+ICBkeW5hbWljIGNhY2hpbmcgc3RydWN0dXJlcyBhbmQgbWVt b3J5LW1hbmFnZW1lbnQgc2NoZW1lcy4gIFNGRU5DRS5WTUEKPj4gIGlzIGFsc28gdXNlZCBieSBo aWdoZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4+IC13cml0 ZXMgYW5kIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLgo+PiArd3JpdGVzIGFuZCB0 aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4gVGhlcmUgaXMgYSBtb2RlIGJpdCB0byBk ZXRlcm1pbmUKPj4gK3NmZW5jZS52bWEgd291bGQgYnJvYWRjYXN0IG9uIGludGVyY29ubmVjdCBv ciBub3QuCj4+ICBcZW5ke2NvbW1lbnRhcnl9Cj4+Cj4+IC1TRkVOQ0UuVk1BIG9yZGVycyBvbmx5 IHRoZSBsb2NhbCBoYXJ0J3MgaW1wbGljaXQgcmVmZXJlbmNlcyB0byB0aGUKPj4gLW1lbW9yeS1t YW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xm b290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17Y0B7fUVA e31LfQo+PiArXGluc3RiaXR7MzF9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7MzB9ezl9ICYKPj4gK1xp bnN0Yml0cmFuZ2V7OH17MH0gXFwKPj4gK1xobGluZQo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 e1x0dCBNT0RFfX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFn ZSB0YWJsZSl9fSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IEFTSUR9fSBcXAo+PiAr XGhsaW5lCj4+ICsxICYgMjIgJiA5IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRl cn0KPj4gK30KPj4gK1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1h IHJzMiBmb3JtYXQufQo+PiArXGxhYmVse3J2MzJzYXRwfQo+PiArXGVuZHtmaWd1cmV9Cj4+ICsK Pj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xmb290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50 ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17QHt9U0B7fVRAe31VfQo+PiArXGluc3RiaXRyYW5nZXs2 M317NjB9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7NTl9ezE2fSAmCj4+ICtcaW5zdGJpdHJhbmdlezE1 fXswfSBcXAo+PiArXGhsaW5lCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IFBQTiAocm9vdCBwYWdlIHRhYmxlKX19ICYK Pj4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e3tcdHQgQVNJRH19IFxcCj4+ICtcaGxpbmUKPj4gKzQg JiA0NCAmIDE2IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRlcn0KPj4gK30KPj4g K1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQs IGZvciBNT0RFIHZhbHVlcywgb25seSBoaWdoZXN0IGJpdDo2MyBpcwo+PiArdmFsaWQgYW5kIG90 aGVycyBhcmUgcmVzZXJ2ZWQufQo+PiArXGxhYmVse3J2NjRzYXRwfQo+PiArXGVuZHtmaWd1cmV9 Cj4+Cj4+ICBcYmVnaW57Y29tbWVudGFyeX0KPj4gLUNvbnNlcXVlbnRseSwgb3RoZXIgaGFydHMg bXVzdCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICtUaGUgbW9kZSdzIGhpZ2hl c3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoIDE6YnJvYWRjYXN0 IG9yIDA6bG9jYWwuCj4+ICtJZiBvbmx5IGhhdmUgbW9kZTpsb2NhbCwgb3RoZXIgaGFydHMgbXVz dCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICBtZW1vcnktbWFuYWdlbWVudCBk YXRhIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgo+PiAgT25lIGFwcHJvYWNoIGlzIHRv IHVzZSAxKQo+PiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBsb2NhbCB3cml0ZXMgYXJl IHZpc2libGUgZ2xvYmFsbHksIHRoZW4KPj4gQEAgLTkyOCw4ICsxMDEyLDE3IEBAIG1vZGlmaWVk IGZvciBhIHNpbmdsZSBhZGRyZXNzIG1hcHBpbmcgKGkuZS4sIG9uZSBwYWdlIG9yIHN1cGVycGFn ZSksIHtcZW0gcnMxfQo+PiAgY2FuIHNwZWNpZnkgYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRo YXQgbWFwcGluZyB0byBlZmZlY3QgYSB0cmFuc2xhdGlvbgo+PiAgZmVuY2UgZm9yIHRoYXQgbWFw cGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUKPj4g IHRyYW5zbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBoYXZlIG9ubHkgYmVlbiBtb2RpZmllZCBmb3Ig YSBzaW5nbGUgYWRkcmVzcy1zcGFjZQo+PiAtaWRlbnRpZmllciwge1xlbSByczJ9IGNhbiBzcGVj aWZ5IHRoZSBhZGRyZXNzIHNwYWNlLiAgVGhlIGJlaGF2aW9yIG9mCj4+IC1TRkVOQ0UuVk1BIGRl cGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4gK2lkZW50aWZp ZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBzcGFjZSB3aXRoIHtcdHQgc2F0 cH0gZm9ybWF0Cj4+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQ TiBpbmZvcm1hdGlvbi4KPj4gKwo+PiArXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICtXZSB1c2UgQVNJ RCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlIGFu ZCB0aGUgZm9ybWF0Cj4+ICtzdG9yZWQgaW4gcnMyIGlzIHNpbWlsYXIgd2l0aCB7XHR0IHNhdHB9 IGRlc2NyaWJlZCBpbiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+PiArQVNJRCBhcmUgdXNlZCBi eSBsb2NhbCBoYXJ0cyBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIG9mIHRoZSBhc2lkIGFyZSB1 c2VkIGJ5Cj4+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJT01NVS4KPj4gK1xl bmR7Y29tbWVudGFyeX0KPj4gKwo+PiArVGhlIGJlaGF2aW9yIG9mIFNGRU5DRS5WTUEgZGVwZW5k cyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcyBmb2xsb3dzOgo+Pgo+PiAgXGJlZ2lue2l0 ZW1pemV9Cj4+ICBcaXRlbSBJZiB7XGVtIHJzMX09e1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0 IHgwfSwgdGhlIGZlbmNlIG9yZGVycyBhbGwKPj4gQEAgLTkzOSwyMyArMTAzMiwxOCBAQCBTRkVO Q0UuVk1BIGRlcGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4g ICAgICAgIGFsbCByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdl IHRhYmxlcywgYnV0IG9ubHkKPj4gICAgICAgIGZvciB0aGUgYWRkcmVzcyBzcGFjZSBpZGVudGlm aWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAgICAgICAgQWNjZXNzZXMgdG8g e1xlbSBnbG9iYWx9IG1hcHBpbmdzIChzZWUgU2VjdGlvbn5ccmVme3NlYzp0cmFuc2xhdGlvbn0p Cj4+IC0gICAgICBhcmUgbm90IG9yZGVyZWQuCj4+ICsgICAgICBhcmUgbm90IG9yZGVyZWQuIFRo ZSBtb2RlIGZpZWxkIGluIHJzMiBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxvY2FsLgo+PiAg XGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwg dGhlIGZlbmNlIG9yZGVycwo+PiAgICAgICAgb25seSByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8g dGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nCj4+ICAgICAgICB0byB0aGUg dmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIGFsbCBhZGRyZXNzIHNwYWNlcy4KPj4g IFxpdGVtIElmIHtcZW0gcnMxfSRcbmVxJHtcdHQgeDB9IGFuZCB7XGVtIHJzMn0kXG5lcSR7XHR0 IHgwfSwgdGhlIGZlbmNlCj4+ICAgICAgICBvcmRlcnMgb25seSByZWFkcyBhbmQgd3JpdGVzIG1h ZGUgdG8gdGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeQo+PiAgICAgICAgY29ycmVzcG9uZGluZyB0 byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIHRoZSBhZGRyZXNzCj4+IC0g ICAgICBzcGFjZSBpZGVudGlmaWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAr ICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2VyIHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhl IG1vZGUgZmllbGQgaW4gcnMyCj4+ICsgICAgICBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxv Y2FsLgo+PiAgICAgICAgQWNjZXNzZXMgdG8gZ2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJl ZC4KPj4gIFxlbmR7aXRlbWl6ZX0KPj4KPj4gLVdoZW4ge1xlbSByczJ9JFxuZXEke1x0dCB4MH0s IGJpdHMgU1hMRU4tMTpBU0lETUFYIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0KPj4gLXJzMn0g YXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3 YXJlIGFuZCBpZ25vcmVkCj4+IC1ieSBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4gIEZ1cnRoZXJt b3JlLCBpZiBBU0lETEVOfiQ8JH5BU0lETUFYLCB0aGUKPj4gLWltcGxlbWVudGF0aW9uIHNoYWxs IGlnbm9yZSBiaXRzIEFTSURNQVgtMTpBU0lETEVOIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0K Pj4gLXJzMn0uCj4+IC0KPj4gIFxiZWdpbntjb21tZW50YXJ5fQo+PiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSBhbmQK Pj4gIHRoZSBBU0lEIHZhbHVlIGluIHtcZW0gcnMyfSBhbmQgYWx3YXlzIHBlcmZvcm0gYSBnbG9i YWwgZmVuY2UuCj4+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBzYW1lIFNG RU5DRS5WTUEgaW5zdHJ1Y3Rpb24gd2hpbGUgYSBkaWZmZXJlbnQgQVNJRCBpcyBsb2FkZWQKPj4g IGludG8ge1x0dCBzYXRwfSwgcHJvdmlkZWQgdGhlIG5leHQgdGltZSB7XHR0IHNhdHB9IGlzIGxv YWRlZCB3aXRoIHRoZSByZWN5Y2xlZAo+PiAgQVNJRCwgaXQgaXMgc2ltdWx0YW5lb3VzbHkgbG9h ZGVkIHdpdGggdGhlIG5ldyBwYWdlIHRhYmxlLgo+Pgo+PiAtXGl0ZW0gSWYgdGhlIGltcGxlbWVu dGF0aW9uIGRvZXMgbm90IHByb3ZpZGUgQVNJRHMsIG9yIHNvZnR3YXJlIGNob29zZXMgdG8KPj4g K1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzIGFuZCBQ UE5zLCBvciBzb2Z0d2FyZSBjaG9vc2VzIHRvCj4+ICBhbHdheXMgdXNlIEFTSUQgMCwgdGhlbiBh ZnRlciBldmVyeSB7XHR0IHNhdHB9IHdyaXRlLCBzb2Z0d2FyZSBzaG91bGQgZXhlY3V0ZQo+PiAg U0ZFTkNFLlZNQSB3aXRoIHtcZW0gcnMxfT17XHR0IHgwfS4gIEluIHRoZSBjb21tb24gY2FzZSB0 aGF0IG5vIGdsb2JhbAo+PiAgdHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSBy czJ9IHNob3VsZCBiZSBzZXQgdG8gYSByZWdpc3RlciBvdGhlciB0aGFuCj4+IEBAIC0xMDAzLDEz ICsxMDkxLDE0IEBAIG5vdCBmbHVzaGVkLgo+Pgo+PiAgXGl0ZW0gSWYgc29mdHdhcmUgbW9kaWZp ZXMgYSBub24tbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlIFNGRU5DRS5WTUEgd2l0aAo+PiAg e1xlbSByczF9PXtcdHQgeDB9LiAgSWYgYW55IFBURSBhbG9uZyB0aGUgdHJhdmVyc2FsIHBhdGgg aGFkIGl0cyBHIGJpdCBzZXQsCj4+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3IKPj4gLXdoaWNoIHRo ZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3tcZW0gcnMyfSBtdXN0IGJlIHtc dHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lEIGFu ZAo+PiArcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gaXMg YmVpbmcgbW9kaWZpZWQuCj4+Cj4+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIGxlYWYg UFRFLCBpdCBzaG91bGQgZXhlY3V0ZSBTRkVOQ0UuVk1BIHdpdGgge1xlbQo+PiAgcnMxfSBzZXQg dG8gYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlLiAgSWYgYW55IFBURSBhbG9uZyB0 aGUgdHJhdmVyc2FsCj4+ICBwYXRoIGhhZCBpdHMgRyBiaXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBi ZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLCB7XGVtIHJzMn0KPj4gLXNob3VsZCBiZSBzZXQgdG8gdGhl IEFTSUQgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3No b3VsZCBiZSBzZXQgdG8gdGhlIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBmb3Igd2hp Y2ggdGhlIHRyYW5zbGF0aW9uCj4+ICtpcyBiZWluZyBtb2RpZmllZC4KPj4KPj4gIFxpdGVtIEZv ciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhIGxl YWYgUFRFIGFuZAo+PiAgY2hhbmdpbmcgYW4gaW52YWxpZCBQVEUgdG8gYSB2YWxpZCBsZWFmLCBz b2Z0d2FyZSBtYXkgY2hvb3NlIHRvIGV4ZWN1dGUKPj4gLS0KPj4gMi43LjQKPj4KPj4KPj4gLT0t PS09LT0tPS09LT0tPS09LT0tPS0KPj4gTGlua3M6IFlvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBz ZW50IHRvIHRoaXMgZ3JvdXAuCj4+Cj4+IFZpZXcvUmVwbHkgT25saW5lICgjODEwKTogaHR0cHM6 Ly9saXN0cy5yaXNjdi5vcmcvZy90ZWNoLXByaXZpbGVnZWQvbWVzc2FnZS84MTAKPj4gTXV0ZSBU aGlzIFRvcGljOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9tdC8zNDE5ODk4Ni8xNjc3MjczCj4+ IEdyb3VwIE93bmVyOiB0ZWNoLXByaXZpbGVnZWQrb3duZXJAbGlzdHMucmlzY3Yub3JnCj4+IFVu c3Vic2NyaWJlOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9nL3RlY2gtcHJpdmlsZWdlZC91bnN1 YiAgW2FuZHJld0BzaWZpdmUuY29tXQo+PiAtPS09LT0tPS09LT0tPS09LT0tPS09LQo+PgoKCi0t IApCZXN0IFJlZ2FyZHMKIEd1byBSZW4KCk1MOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1jc2t5LwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpr dm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9s aXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33022C3A5A6 for ; Fri, 20 Sep 2019 00:13:30 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 01E52206B6 for ; Fri, 20 Sep 2019 00:13:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ft54KrsJ"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="ARio8/iP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 01E52206B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ptAcTbc6SLyZmtZ1fJW0EwRUD2qkzGuV/NARNi3C02k=; b=ft54KrsJHgpHCW dRM/Gx7qZwzG0cWbHG+k4/e/sHOUi1wU/wZov5vr9x2DyDiuhHUfGr3SUbIfxM/0h3olWC0uuv0Lh ZC+hF0HvfkZEPO3LMaYjwP2V51e8PCx3RMsgL14ecVP/f+Wq+5aPotslBS9RSc7iO+VonO4bTckDv JUov1BoCSQbNZ0hMYN5LDrVK80HI535bG35NyDUKKuK4NhZAN/QZhLx4Gi5kCREQADIY00mGTk+78 FwNx1KIxyLwuvgkF1mWohZ4yOJAtU8UnzqvLndSmm39HLWVt4PHOT3XY/ujqIc69OSY3D+xNJcQPg RtdANAACkhS3vtxJIFBA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB6Y8-0004o3-8k; Fri, 20 Sep 2019 00:13:24 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB6Y2-0004nX-Ij; Fri, 20 Sep 2019 00:13:22 +0000 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CA5A921A4C; Fri, 20 Sep 2019 00:13:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568938398; bh=D8bx1xHc5epkdZEII/+y/J/4g7IgnqvOJf4mlU6/sng=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=ARio8/iPTeDTzHJev/ZtCVsx/Sc8QM769WOnao31YkjCZ7ky53P5K9d/FugFi8NPE XEyONzCfi2gcO7kubI0Q2pyvtJfUyKQMfHz7e/3PeM2ql/6w+gGllHKRwZvRuNmyRS TibBLoHEa9eKLPHxpVgcsVpPOLHACRmbgFfjlyCU= Received: by mail-wr1-f42.google.com with SMTP id n14so4904169wrw.9; Thu, 19 Sep 2019 17:13:17 -0700 (PDT) X-Gm-Message-State: APjAAAXxKazmSSvdUP5u/Ejum3+uNIiR586sLrKVj8r6iffrzTaew5Mx zaUKmjlGdAtk/rfAS79aCUtIoOvEtVStJnxF74E= X-Google-Smtp-Source: APXvYqydI+4EP3dsUrXmWLL5d6kf6TOOLzgdqvDVz56Rpd9MEYS9ZdQysBuqWQS8Yi2tncEfXArIbYtOUMedD24HhZA= X-Received: by 2002:a5d:66d2:: with SMTP id k18mr8973963wrw.7.1568938396076; Thu, 19 Sep 2019 17:13:16 -0700 (PDT) MIME-Version: 1.0 References: <1568896556-28769-1-git-send-email-guoren@kernel.org> In-Reply-To: From: Guo Ren Date: Fri, 20 Sep 2019 08:13:02 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma To: Andrew Waterman X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190919_171318_675202_A94EF1FB X-CRM114-Status: GOOD ( 21.33 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: julien.thierry@arm.com, Catalin Marinas , Palmer Dabbelt , Will Deacon , Atish Patra , Julien Grall , gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, Jean-Philippe Brucker , linux-csky@vger.kernel.org, Mike Rapoport , Guo Ren , benh@kernel.crashing.org, jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, Marc Zyngier , linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup Patel , Linux Kernel Mailing List , iommu@lists.linux-foundation.org, dwmw2@infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpPbiBGcmksIFNlcCAyMCwgMjAxOSBhdCAxMjoxMCBBTSBBbmRyZXcgV2F0ZXJtYW4gPGFu ZHJld0BzaWZpdmUuY29tPiB3cm90ZToKPgo+IFRoaXMgbmVlZHMgdG8gYmUgZGlzY3Vzc2VkIGFu ZCBkZWJhdGVkIGF0IGxlbmd0aDsgcHJvcG9zaW5nIGVkaXRzIHRvIHRoZSBzcGVjIGF0IHRoaXMg c3RhZ2UgaXMgcHV0dGluZyB0aGUgY2FydCBiZWZvcmUgdGhlIGhvcnNlIQpBZ3JlZSA6KQoKPgo+ IFdlIHNob3VsZG7igJl0IGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZXhpc3RpbmcgU0ZF TkNFLlZNQSBpbnN0cnVjdGlvbiB0byBhY2NvbXBsaXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBh YnVuZGFudGx5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBzaG91bGQgYmUgYW4gaW5zdHJ1Y3Rpb246 CklmIHlvdSBpbXBsZW1lbnQgc2ZlbmNlLnZtYSBhcyBjdXJyZW50IGRlZmluZSwgaXQgYWxzbyBj b3VsZCB3b3JrIHdpdGgKbmV3IG1lY2hhbmlzbSwgdGhleSBhcmUgY29tcGF0aWJsZS4KCj4gVExC IHNob290ZG93biBsb29rcyBtb3JlIGxpa2UgTU1JTy4KUGVyLUNQVSBNTUlPID8gSSB0aGUgcHJv cG9zYWwsIGV2ZXJ5IGhhcnQgb25seSB0YWtlcyBjYXJlIG9mIGl0cyBvd24gcmVxdWVzdC4KCgoK Cj4KPiBPbiBUaHUsIFNlcCAxOSwgMjAxOSBhdCA1OjM2IEFNIEd1byBSZW4gPGd1b3JlbkBrZXJu ZWwub3JnPiB3cm90ZToKPj4KPj4gRnJvbTogR3VvIFJlbiA8cmVuX2d1b0BjLXNreS5jb20+Cj4+ Cj4+IFRoZSBwYXRjaCBpcyBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWlzYS1t YW51YWwKPj4KPj4gVGhlIHByb3Bvc2FsIGhhcyBiZWVuIHRhbGtlZCBpbiBMUEMtMjAxOSBSSVND LVYgTUMgcmVmIFsxXS4gSGVyZSBpcyB0aGUKPj4gZm9ybWFsIHBhdGNoLgo+Pgo+PiBJbnRyb2R1 Y3Rpb24KPj4gPT09PT09PT09PT09Cj4+Cj4+IFVzaW5nIHRoZSBIYXJkd2FyZSBUTEIgYnJvYWRj YXN0IGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbiB0byBtYWludGFpbiB0aGUKPj4gc3lzdGVtIFRM QiBpcyBhIGdvb2QgY2hvaWNlIGFuZCBpdCdsbCBzaW1wbGlmeSB0aGUgc3lzdGVtIHNvZnR3YXJl IGRlc2lnbi4KPj4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBtb2RlIHRv IHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+PiByaXNjdi1wcml2aWxlZ2Ugc3BlY2lmaWNhdGlvbi4g VG8gc3VwcG9ydCB0aGUgc2ZlbmNlLnZtYSBicm9hZGNhc3QgbW9kZSwKPj4gdGhlcmUgYXJlIHR3 byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPj4KPj4gIDEpIEFkZCBQR0QuUFBOIChy b290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUKPj4g ICAgIGFkZHJlc3Mgc3BhY2UgaW4gYWRkaXRpb24gdG8gYXNpZC92bWlkLiBDb21wYXJlZCB0byB0 aGUgZHluYW1pY2FsbHkKPj4gICAgIGNoYW5nZWQgYXNpZC92bWlkLCBQR0QuUFBOIGlzIGZpeGVk IHRocm91Z2hvdXQgdGhlIGFkZHJlc3Mgc3BhY2UgbGlmZQo+PiAgICAgY3ljbGUuIFRoaXMgZmVh dHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVzcyBzcGFjZSBpZGVudGlmaWNhdGlvbgo+PiAgICAg YmV0d2VlbiBkaWZmZXJlbnQgVExCIHN5c3RlbXMgKGFjdHVhbGx5LCBpdCdzIGRpZmZpY3VsdCB0 byB1bmlmeSB0aGUKPj4gICAgIGFzaWQvdm1pZCBiZXR3ZWVuIHRoZSBDUFUgc3lzdGVtIGFuZCB0 aGUgSU9NTVUgc3lzdGVtLCBiZWNhdXNlIHRoZWlyCj4+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZm ZXJlbnQpCj4+Cj4+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEg aW5zdHJ1Y3Rpb24gZnJvbSBzeW5jaHJvbm91cwo+PiAgICAgbW9kZSB0byBhc3luY2hyb25vdXMg bW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgVExCCj4+ICAgICBv cGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgd2hlbiB0aGUgc2ZlbmNlLnZtYSBpbnN0cnVjdGlv biByZXRpcmVzLgo+PiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNraW5nIHRo ZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4gVGhlCj4+ICAgICBzZmVuY2Uudm1hIHJlcXVlc3QgZmlu aXNoIGNhbiBub3RpZnkgdGhlIHNvZnR3YXJlIGJ5IGdlbmVyYXRpbmcgYW4KPj4gICAgIGludGVy cnVwdC4gVGhpcyBmdW5jdGlvbiBhbGxldmlhdGVzIHRoZSBsYXJnZSBkZWxheSBvZiBUTEIgaW52 YWxpZGF0aW9uCj4+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0ZW0uCj4+Cj4+IEFkZCBTMS9TMi5Q R0QuUFBOIGZvciBBU0lEL1ZNSUQKPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ Pgo+PiBQR0QgaXMgZ2xvYmFsIGRpcmVjdG9yeSAoZGVmaW5lZCBpbiBsaW51eCkgYW5kIFBQTiBp cyBwYWdlIHBoeXNpY2FsIG51bWJlcgo+PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBO TiBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBwYWdlIHRhYmxlIHBvaW50ZXIKPj4gb2YgdGhlIGFk ZHJlc3Mgc3BhY2UsIGkuZS4gbW0tPnBnZCAobGludXggY29uY2VwdCkuCj4+Cj4+IEluIENQVS9J T01NVSBUTEIsIHdlIHVzZSBhc2lkL3ZtaWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGFkZHJlc3Mgc3Bh Y2Ugb2YKPj4gcHJvY2VzcyBvciB2aXJ0dWFsIG1hY2hpbmUuIER1ZSB0byB0aGUgbGltaXRhdGlv biBvZiBpZCBlbmNvZGluZywgaXQgY2FuCj4+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cp IG9mIHRoZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOIGFyZSB0aGUKPj4gcm9vdCBwYWdl IHRhYmxlJ3MgUFBOcyBvZiB0aGUgYWRkcmVzcyBzcGFjZXMgYW5kIFMxL1MyLlBHRC5QUE4gYXJl IHRoZQo+PiB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWRkcmVzcyBzcGFjZXMuCj4+Cj4+IEZv ciB0aGUgQ1BVIFNNUCBzeXN0ZW0sIHlvdSBjYW4gdXNlIGNvbnRleHQgc3dpdGNoIHRvIHBlcmZv cm0gdGhlIG5lY2Vzc2FyeQo+PiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgdGhl IGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMgY29uc2lzdGVudAo+PiAocGxlYXNlIHJlZmVyIHRv IHRoZSBhcm02NCBhc2lkIG1lY2hhbmlzbSkuIEluIHRoaXMgd2F5LCB0aGUgVExCIGJyb2FkY2Fz dAo+PiBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gY2FuIGRldGVybWluZSB0aGUgYWRkcmVzcyBz cGFjZSBwcm9jZXNzZWQgb24gYWxsCj4+IGhhcnRzIGJ5IGFzaWQvdm1pZC4KPj4KPj4gRGlmZmVy ZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVtLCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBm b3IgdGhlCj4+IERNQS1JT01NVSBzeXN0ZW0sIHNvIHRoZSB1bmlmaWNhdGlvbiB3aXRoIHRoZSBD UFUgYXNpZC92bWlkIGNhbm5vdCBiZQo+PiBndWFyYW50ZWVkLiBTbyB3ZSBuZWVkIGEgdW5pcXVl IGlkZW50aWZpZXIgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIHRvCj4+IGVzdGFibGlzaCBhIGNvbW11 bmljYXRpb24gYnJpZGdlIGJldHdlZW4gdGhlIFRMQnMgb2YgZGlmZmVyZW50IHN5c3RlbXMuCj4+ Cj4+IFRoYXQgaXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIu UEdELlBQTikKPj4KPj4gY3VycmVudDoKPj4gIHNmZW5jZS52bWEgIHJzMSA9IHZhZGRyLCByczIg PSBhc2lkCj4+ICBoZmVuY2UudnZtYSByczEgPSB2YWRkciwgcnMyID0gYXNpZAo+PiAgaGZlbmNl Lmd2bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPj4KPj4gcHJvcG9zZWQ6Cj4+ICBzZmVuY2Uu dm1hICByczEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+PiAgaGZlbmNlLnZ2bWEgcnMx ID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPj4gIGhmZW5jZS5ndm1hIHJzMSA9IGdhZGRy LCByczIgPSBtb2RlOnBwbjp2bWlkCj4+Cj4+ICBtb2RlICAgICAgLSBicm9hZGNhc3QgfCBsb2Nh bAo+PiAgcHBuICAgICAgIC0gdGhlIFBQTiBvZiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgcm9v dCBwYWdlIHRhYmxlCj4+ICB2bWlkL2FzaWQgLSB0aGUgd2luZG93IGlkZW50aWZpZXIgb2YgdGhl IGFkZHJlc3Mgc3BhY2UKPj4KPj4gQXQgdGhlIExpbnV4IFBsdW1iZXIgQ29uZmVyZW5jZSAyMDE5 IFJJU0NWLU1DLCByZWY6WzFdLCB3ZSd2ZSBzaG93ZWQgdHdvCj4+IElPTU1VIGV4YW1wbGVzIHRv IGV4cGxhaW4gaG93IGl0IHdvcmsgd2l0aCBoYXJkd2FyZS4KPj4KPj4gMSkgSW4gYSBsaWdodHdl aWdodCBJT01NVSBzeXN0ZW0gKHVwIHRvIDY0IGFkZHJlc3Mgc3BhY2VzKSwgdGhlIGhhcmR3YXJl Cj4+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdELlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJ RCkKPj4KPj4gMikgRm9yIHRoZSBQQ0kgQVRTIHNjZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVu Y29kaW5nIHNwYWNlIGNhbiBzdXBwb3J0Cj4+ICAgIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgYWRk cmVzcyBzcGFjZXMuIFdlIHVzZSB0d28gcmV2ZXJzZSBtYXBwaW5nCj4+ICAgIHRhYmxlcyB0byBs ZXQgdGhlIGhhcmR3YXJlIHRyYW5zbGF0ZSBTMS9TMi5QR0QuUFBOIGludG8gSU8gQVNJRC9WTUlE Lgo+Pgo+PiBBU1lOQyBCUk9BRENBU1QgU0ZFTkNFLlZNQQo+PiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPj4KPj4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVu Y2Uudm1hIG9wZXJhdGlvbiBpbiB0aGUgUENJIEFUUwo+PiB1c2FnZSBzY2VuYXJpbywgd2UgbW9k aWZ5IHRoZSBzZmVuY2Uudm1hIGZyb20gc3luY2hyb25vdXMgbW9kZSB0bwo+PiBhc3luY2hyb25v dXMgbW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5IGlt cGxlbWVudAo+PiBzeW5jaHJvbm91cyBtb2RlIGFuZCBzb2Z0d2FyZSBzdGlsbCB3b3JrIGluIGFz eW5jaHJvbm91cyBtb2RlKQo+Pgo+PiBUbyBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBtb2Rl LCAzIGZlYXR1cmVzIGFyZSBhZGRlZDoKPj4gIDEpIHNzdGF0dXM6VExCSQo+PiAgICAgQSAic3Rh dHVzIGJpdCAtIFRMQkkiIGlzIGFkZGVkIHRvIHRoZSBzc3RhdHVzIHJlZ2lzdGVyLiBUaGUgVExC SSBzdGF0dXMKPj4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5k aW5nIHNmZW5jZS52bWEgcmVxdWVzdHMgb24gdGhlCj4+ICAgICBjdXJyZW50IGhhcnQuCj4+ICAg ICBWYWx1ZToKPj4gICAgICAgMTogc2ZlbmNlLnZtYSByZXF1ZXN0cyBhcmUgbm90IGNvbXBsZXRl ZC4KPj4gICAgICAgMDogYWxsIHNmZWNlLnZtYSByZXF1ZXN0cyBjb21wbGV0ZWQsIHJlcXVlc3Qg cXVldWUgaXMgZW1wdHkuCj4+Cj4+ICAyKSBzc3RhdHVzOlRMQklDCj4+ICAgICBBICJjb250cm9s IGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1cyByZWdpc3Rlci4gVGhlIFRMQklDIGNv bnRyb2wKPj4gICAgIGJpdHMgYXJlIGNvbnRyb2xsZWQgYnkgc29mdHdhcmUuCj4+ICAgICAiV3Jp dGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJyZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJl IGFyZSBzdGlsbAo+PiAgICAgb3V0c3RhbmRpbmcgc2ZlbmNlLnZtYSByZXF1ZXN0cy4gSWYgdGhl cmUgYXJlIHVuZmluaXNoZWQgcmVxdWVzdHMsIGFuCj4+ICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBn ZW5lcmF0ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIG5vdGlmeWluZyB0aGUKPj4g ICAgIHNvZnR3YXJlIHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMg aGF2ZSBiZWVuIGNvbXBsZXRlZC4KPj4gICAgICJXcml0ZSAwIiB3aWxsIGNhdXNlIG5vdGhpbmcu Cj4+Cj4+ICAzKSBzdXBlcnZpc29yIGludGVycnVwdCByZWdpc3RlciAoc2lwICYgc2llKTpUTEJJ IGZpbmlzaCBpbnRlcnJ1cHQKPj4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRv IHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVycy4KPj4gICAgIFdoZW4gYWxsIHNmZW5jZS52 bWEgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZCBhbmQgc3N0YXR1czpUTEJJQyBoYXMgYmVlbgo+PiAg ICAgdHJpZ2dlcmVkLCBoYXJ0IHdpbGwgcmVjZWl2ZSBhIFRMQkkgZmluaXNoIGludGVycnVwdC4g SnVzdCBsaWtlIHRpbWVyLAo+PiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFsIGludGVycnVwdCdz IGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+Pgo+PiBGYWtlIGNvZGU6Cj4+Cj4+IGZsdXNoX3Rs Yl9wYWdlKHZtYSwgYWRkcikgewo+PiAgICAgYXNpZCA9IGNwdV9hc2lkKHZtYS0+dm1fbW0pOwo+ PiAgICAgcHBuID0gUEZOX0RPV04odm1hLT52bV9tbS0+cGdkKTsKPj4KPj4gICAgIHNmZW5jZS52 bWEgKGFkZHIsIDF8UFBOX09GRlNFVChwcG4pfGFzaWQpOyAvLzEuIHN0YXJ0IHJlcXVlc3QKPj4K Pj4gICAgIHdoaWxlKHNzdGF0dXM6VExCSSkgaWYgKHRpbWVfb3V0KCkgPiAxbXMpIGJyZWFrOyAv LzIuIGxvb3AgY2hlY2sKPj4KPj4gICAgIHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPj4gICAgICAg ICAuLi4KPj4gICAgICAgICBzZXQgc3N0YXR1czpUTEJJQzsKPj4gICAgICAgICB3YWl0X1RMQklf ZmluaXNoX2ludGVycnVwdCgpOyAvLzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+PiAgICAgfQo+ PiB9Cj4+Cj4+IEhlcmUgd2UgZ2l2ZSAyIGxldmVsIGNoZWNrOgo+PiAgMSkgbG9vcCBjaGVjayBz c3RhdHVzOlRMQkksIENQVSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4+ICAyKSBzZXQgc3N0 YXR1czpUTEJJQyBhbmQgd2FpdCBmb3IgaXJxLCBDUFUgc2NoZWR1bGUgb3V0IGZvciBvdGhlciB0 YXNrLgo+Pgo+PiBBQ0UtRFZNIEV4YW1wbGUKPj4gPT09PT09PT09PT09PT09Cj4+Cj4+IEhvbmVz dGx5LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8gaW50 ZXJjb25uZWN0cyIKPj4gYW5kICJBU1lOQyBTRkVOQ0UuVk1BIiBjb3VsZCBiZSBpbXBsZW1lbnRl ZCBieSBBQ0UtRFZNIHByb3RvY29sIHJlZiBbMl0uCj4+Cj4+IFRoZXJlIGFyZSAzIHR5cGVzIG9m IHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4+Cj4+ICAtIERWTSBvcGVyYXRpb24KPj4gICAgU2VuZCBh bGwgaW5mb3JtYXRpb24gdG8gdGhlIGludGVyY29ubmVjdCwgaW5jbHVkaW5nIGFkZHIsIGFzaWQs Cj4+ICAgIFMxLlBHRC5QUE4sIHZtaWQsIFMyLlBHRC5QUE4uCj4+Cj4+ICAtIERWTSBzeW5jaHJv bml6YXRpb24KPj4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJhdGlvbnMgaGF2ZSBiZWVuIGNv bXBsZXRlZC4gSWYgbm90LCBpdCB3aWxsIHVzZQo+PiAgICBzdGF0ZSBtYWNoaW5lIHRvIHdhaXQg RFZNIGNvbXBsZXRlIHJlcXVlc3RzLgo+Pgo+PiAgLSBEVk0gY29tcGxldGUKPj4gICAgUmV0dXJu IHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywgZWc6IElPTU1VLiBJZiBoYXJ0IGhhcyByZWNl aXZlZCBhbGwKPj4gICAgRFZNIGNvbXBsZXRlcyB3aGljaCBhcmUgdHJpZ2dlcmVkIGJ5IHNmZW5j ZS52bWEgaW5zdHJ1Y3Rpb25zIGFuZAo+PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0 LCBhIFRMQkkgZmluaXNoIGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCj4+Cj4+IChBY3R1YWxseSwg d2UgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBmdW5jdGlvbnMgc3RyaWN0bHkK Pj4gIGFjY29yZGluZyB0byB0aGUgQUNFIHNwZWNpZmljYXRpb24gOlAgKQo+Pgo+PiAgMTogaHR0 cHM6Ly93d3cubGludXhwbHVtYmVyc2NvbmYub3JnL2V2ZW50LzQvY29udHJpYnV0aW9ucy8zMDcv Cj4+ICAyOiBBTUJBIEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmli dXRlZCBWaXJ0dWFsIE1lbW9yeQo+PiAgICAgVHJhbnNhY3Rpb25zIgo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPj4gUmV2aWV3ZWQtYnk6IExpIEZlaXRl bmcgPGZlaXRlbmdfbGlAYy1za3kuY29tPgo+PiAtLS0KPj4gIHNyYy9oeXBlcnZpc29yLnRleCB8 ICA0MyArKysrKysrKy0tLS0tLS0KPj4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgMiBmaWxl cyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvaHlwZXJ2aXNvci50ZXggYi9zcmMvaHlwZXJ2aXNvci50ZXgKPj4gaW5kZXgg NDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPj4gLS0tIGEvc3JjL2h5cGVydmlzb3IudGV4Cj4+ICsr KyBiL3NyYy9oeXBlcnZpc29yLnRleAo+PiBAQCAtMTA5NCwxNSArMTA5NCwxNSBAQCBUaGUgaHlw ZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3IHByaXZpbGVnZWQgZmVuY2UgaW5zdHJ1Y3Rp b25zLgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtvcGNvZGV9IFxcCj4+ICBcaGxpbmUKPj4gIDcg JiA1ICYgNSAmIDMgJiA1ICYgNyBcXAo+PiAtSEZFTkNFLkdWTUEgJiB2bWlkICYgZ2FkZHIgJiBQ UklWICYgMCAmIFNZU1RFTSBcXAo+PiAtSEZFTkNFLlZWTUEgJiBhc2lkICYgdmFkZHIgJiBQUklW ICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLkdWTUEgJiBtb2RlOnBwbjp2bWlkICYgZ2FkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArSEZFTkNFLlZWTUEgJiBtb2RlOnBwbjphc2lkICYg dmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+ICBUaGUgaHlwZXJ2aXNvciBtZW1vcnktbWFuYWdlbWVudCBmZW5jZSBpbnN0 cnVjdGlvbnMsIEhGRU5DRS5HVk1BIGFuZAo+PiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5 IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1zdGF0dXN9LlRWTT0wLCBvciBpbiBNLW1vZGUKPj4gIChp cnJlc3BlY3RpdmUgb2Yge1x0dCBtc3RhdHVzfS5UVk0pLgo+PiAtVGhlc2UgaW5zdHJ1Y3Rpb25z IHBlcmZvcm0gYSBmdW5jdGlvbiBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPj4gK1RoZXNlIGluc3Ry dWN0aW9ucyBwZXJmb3JtIGEgZnVuY3Rpb24gc2ltaWxhciB0byBTRkVOQ0UuVk1BIChicm9hZGNh c3QvbG9jYWwpCj4+ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBs eWluZyB0byB0aGUgZ3Vlc3QtcGh5c2ljYWwKPj4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3Ry dWN0dXJlcyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfSAoSEZFTkNFLkdWTUEpCj4+ICBv ciB0aGUgVlMtbGV2ZWwgbWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRyb2xs ZWQgYnkgQ1NSIHtcdHQgdnNhdHB9Cj4+IEBAIC0xMTM2LDExICsxMTM2LDEwIEBAIEFuIEhGRU5D RS5WVk1BIGluc3RydWN0aW9uIGFwcGxpZXMgb25seSB0byBhIHNpbmdsZSB2aXJ0dWFsIG1hY2hp bmUsIGlkZW50aWZpZWQKPj4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9LlZNSUQgd2hl biBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPj4gIFxlbmR7Y29tbWVudGFyeX0KPj4KPj4gLVdoZW4g e1xlbSByczJ9JFxuZXEke1x0dCB4MH0sIGJpdHMgWExFTi0xOkFTSURNQVggb2YgdGhlIHZhbHVl IGhlbGQgaW4ge1xlbQo+PiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUgYW5kIGlnbm9yZWQKPj4gLWJ5IGN1cnJlbnQgaW1w bGVtZW50YXRpb25zLgo+PiAtRnVydGhlcm1vcmUsIGlmIEFTSURMRU5+JDwkfkFTSURNQVgsIHRo ZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUgYml0cwo+PiAtQVNJRE1BWC0xOkFTSURMRU4g b2YgdGhlIHZhbHVlIGhlbGQgaW4ge1xlbSByczJ9Lgo+PiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7 XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLCBwcG4sIGFzaWQuCj4+ ICsxKSBtb2RlIGNvbnRyb2wgSEZFTkNFLlZWTUEgYnJvYWRjYXN0IG9yIG5vdC4KPj4gKzIpIHBw biBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2Uu Cj4+ICszKSBhc2lkIGlzIHRoZSBpZGVudGlmaWVyIG9mIHByb2Nlc3MgaW4gdmlydHVhbCBtYWNo aW5lLgo+Pgo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9u cyBvZiBIRkVOQ0UuVlZNQSBjYW4gaWdub3JlIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW4K Pj4gQEAgLTExNjgsMTEgKzExNjcsMTAgQEAgcGh5c2ljYWwgYWRkcmVzc2VzIGluIFBNUCBhZGRy ZXNzIHJlZ2lzdGVycyAoU2VjdGlvbn5ccmVme3NlYzpwbXB9KSBhbmQgaW4gcGFnZQo+PiAgdGFi bGUgZW50cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LCBhbmR+ XHJlZntzZWM6c3Y0OH0pLgo+PiAgXGVuZHtjb21tZW50YXJ5fQo+Pgo+PiAtV2hlbiB7XGVtIHJz Mn0kXG5lcSR7XHR0IHgwfSwgYml0cyBYTEVOLTE6Vk1JRE1BWCBvZiB0aGUgdmFsdWUgaGVsZCBp biB7XGVtCj4+IC1yczJ9IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hvdWxkIGJl IHplcm9lZCBieSBzb2Z0d2FyZSBhbmQgaWdub3JlZAo+PiAtYnkgY3VycmVudCBpbXBsZW1lbnRh dGlvbnMuCj4+IC1GdXJ0aGVybW9yZSwgaWYgVk1JRExFTn4kPCR+Vk1JRE1BWCwgdGhlIGltcGxl bWVudGF0aW9uIHNoYWxsIGlnbm9yZSBiaXRzCj4+IC1WTUlETUFYLTE6Vk1JRExFTiBvZiB0aGUg dmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4+ICtXaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9 LCBiaXRzIGNvbnRhaW4gMyBpbmZvcm1hdGlvbnM6IG1vZGUsIHZtaWQsIHBwbi4KPj4gKzEpIG1v ZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+PiArMikgcHBuIGlzIHRo ZSByb290IHBhZ2UgdGFsYmUncyBQUE4gb2YgdGhlIHZtaWQgYWRkcmVzcyBzcGFjZS4KPj4gKzMp IHZtaWQgaXMgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBtYWNoaW5lLgo+Pgo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBTaW1wbGVyIGltcGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBj YW4gaWdub3JlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGluCj4+IEBAIC0xNTY3LDIxICsx NTY1LDIyIEBAIHJlZ2lzdGVyLgo+PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVu Y2VzfQo+Pgo+PiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlz IGFmZmVjdGVkIGJ5IHRoZSBjdXJyZW50Cj4+IC12aXJ0dWFsaXphdGlvbiBtb2RlIFYuICBXaGVu IFY9MCwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCBpcyBhbiBIUy1sZXZlbAo+PiAtdmly dHVhbCBhZGRyZXNzLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYW4gSFMtbGV2ZWwgQVNJRC4K Pj4gK3ZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgcnMxIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsCj4+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlz IGFuIEhTLWxldmVsIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTi4KPj4gIFRoZSBpbnN0 cnVjdGlvbiBvcmRlcnMgc3RvcmVzIG9ubHkgdG8gSFMtbGV2ZWwgYWRkcmVzcy10cmFuc2xhdGlv biBzdHJ1Y3R1cmVzCj4+ICB3aXRoIHN1YnNlcXVlbnQgSFMtbGV2ZWwgYWRkcmVzcyB0cmFuc2xh dGlvbnMuCj4+Cj4+IC1XaGVuIFY9MSwgdGhlIHZpcnR1YWwtYWRkcmVzcyBhcmd1bWVudCB0byBT RkVOQ0UuVk1BIGlzIGEgZ3Vlc3QgdmlydHVhbAo+PiAtYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJl bnQgdmlydHVhbCBtYWNoaW5lLCBhbmQgdGhlIEFTSUQgYXJndW1lbnQgaXMgYSBWUy1sZXZlbAo+ PiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5lLgo+PiArV2hlbiBWPTEs IHRoZSByczEgYXJndW1lbnQgdG8gU0ZFTkNFLlZNQSBpcyBhIGd1ZXN0IHZpcnR1YWwKPj4gK2Fk ZHJlc3Mgd2l0aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSByczIgYXJn dW1lbnQgaXMgYSBWUy1sZXZlbAo+PiArQVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHdp dGhpbiB0aGUgY3VycmVudCB2aXJ0dWFsIG1hY2hpbmUuCj4+ICBUaGUgY3VycmVudCB2aXJ0dWFs IG1hY2hpbmUgaXMgaWRlbnRpZmllZCBieSB0aGUgVk1JRCBmaWVsZCBvZiBDU1Ige1x0dCBoZ2F0 cH0sCj4+IC1hbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHRo ZSBjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQKPj4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4+ ICthbmQgdGhlIGVmZmVjdGl2ZSBBU0lEIGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gY2FuIGJl IGNvbnNpZGVyZWQgdG8gYmUgdGhlCj4+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJv b3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoIHRoZSBWUy1sZXZlbCBBU0lEIGFuZAo+PiArcm9vdCBw YWdlIHRhYmxlJ3MgUFBOLgo+PiAgVGhlIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24gb3JkZXJzIHN0 b3JlcyBvbmx5IHRvIHRoZSBWUy1sZXZlbAo+PiAgYWRkcmVzcy10cmFuc2xhdGlvbiBzdHJ1Y3R1 cmVzIHdpdGggc3Vic2VxdWVudCBWUy1sZXZlbCBhZGRyZXNzIHRyYW5zbGF0aW9ucwo+PiAtZm9y IHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdhdHB9LlZN SUQgaXMgdGhlIHNhbWUgYXMKPj4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4+ICtm b3IgdGhlIHNhbWUgdmlydHVhbCBtYWNoaW5lLCBpLmUuLCBvbmx5IHdoZW4ge1x0dCBoZ2F0cH0u Vk1JRCBhbmQge1xcdHQgaGdhdHB9LlBQTiBpcwo+PiArdGhlIHNhbWUgYXMgd2hlbiB0aGUgU0ZF TkNFLlZNQSBleGVjdXRlZC4KPj4KPj4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rpb25zIEhGRU5DRS5H Vk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlIGFkZGl0aW9uYWwKPj4gIG1lbW9yeS1tYW5hZ2Vt ZW50IGZlbmNlcyB0byBjb21wbGVtZW50IFNGRU5DRS5WTUEuCj4+IGRpZmYgLS1naXQgYS9zcmMv c3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPj4gaW5kZXggYmEzY2VkNS4uMjg3 N2I3YSAxMDA2NDQKPj4gLS0tIGEvc3JjL3N1cGVydmlzb3IudGV4Cj4+ICsrKyBiL3NyYy9zdXBl cnZpc29yLnRleAo+PiBAQCAtNDcsMTAgKzQ3LDEyIEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9m IHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxiZWdpbntjZW50 ZXJ9Cj4+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gIFxzY2FsZWJveHswLjk1fXsK Pj4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2NjV2NjY2NXY2N9Cj4+ICtcYmVnaW57dGFidWxhcn17 Y2NjV2NjY2NjV2NjY2NXY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7MzF9ICYKPj4gLVxpbnN0Yml0 cmFuZ2V7MzB9ezIwfSAmCj4+ICtcaW5zdGJpdHszMH0gJgo+PiArXGluc3RiaXR7Mjl9ICYKPj4g K1xpbnN0Yml0cmFuZ2V7Mjh9ezIwfSAmCj4+ICBcaW5zdGJpdHsxOX0gJgo+PiAgXGluc3RiaXR7 MTh9ICYKPj4gIFxpbnN0Yml0ezE3fSAmCj4+IEBAIC02Niw2ICs2OCw4IEBAIHJlZ2lzdGVyIGtl ZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4g IFxpbnN0Yml0ezB9IFxcCj4+ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8 fXtUTEJJQ30gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29s dW1uezF9e2N8fXtNWFJ9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1VNfSAmCj4+IEBAIC04 Miw3ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJy ZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9Cj4+ICBc XAo+PiAgXGhsaW5lCj4+IC0xICYgMTEgJiAxICYgMSAmIDEgJiAyICYgMiAmIDQgJiAxICYgMSAm IDEgJiAxICYgMyAmIDEgJiAxIFxcCj4+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYgMSAmIDIg JiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn19 Cj4+ICBcZW5ke2NlbnRlcn0KPj4gIH0KPj4gQEAgLTk1LDEwICs5OSwxMiBAQCByZWdpc3RlciBr ZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUuCj4+ ICB7XGZvb3Rub3Rlc2l6ZQo+PiAgXGJlZ2lue2NlbnRlcn0KPj4gIFxzZXRsZW5ndGh7XHRhYmNv bHNlcH17NHB0fQo+PiAtXGJlZ2lue3RhYnVsYXJ9e2NNRlNjY2NjfQo+PiArXGJlZ2lue3RhYnVs YXJ9e2NjY01GU2NjY2N9Cj4+ICBcXAo+PiAgXGluc3RiaXR7U1hMRU4tMX0gJgo+PiAtXGluc3Ri aXRyYW5nZXtTWExFTi0yfXszNH0gJgo+PiArXGluc3RiaXR7U1hMRU4tMn0gJgo+PiArXGluc3Ri aXR7U1hMRU4tM30gJgo+PiArXGluc3RiaXRyYW5nZXtTWExFTi00fXszNH0gJgo+PiAgXGluc3Ri aXRyYW5nZXszM317MzJ9ICYKPj4gIFxpbnN0Yml0cmFuZ2V7MzF9ezIwfSAmCj4+ICBcaW5zdGJp dHsxOX0gJgo+PiBAQCAtMTA3LDYgKzExMyw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRo ZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KPj4gICBcXAo+PiAgXGhsaW5l Cj4+ICBcbXVsdGljb2x1bW57MX17fGN8fXtTRH0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 VExCSX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPj4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17VVhMWzE6MF19ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9ICYKPj4gQEAgLTExNSw3ICsxMjMsNyBAQCByZWdp c3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudCBvcGVyYXRpbmcgc3Rh dGUuCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICAgXFwKPj4gIFxobGluZQo+ PiAtMSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gKzEgJiAxICYgMSAm IFNYTEVOLTM3ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPj4gIFxcCj4+IEBAIC0xNTIsNiArMTYwLDE3 IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50IG9wZXJh dGluZyBzdGF0ZS4KPj4gIFxsYWJlbHtzc3RhdHVzcmVnfQo+PiAgXGVuZHtmaWd1cmUqfQo+Pgo+ PiArVGhlIFRMQkkgKHJlYWQtb25seSkgYml0IGluZGljYXRlcyB0aGF0IGFueSBhc3luYyBzZmVu Y2Uudm1hIG9wZXJhdGlvbnMgYXJlCj4+ICtzdGlsbCBwZW5kZWQgb24gdGhlIGhhcnQuIFRoZSB2 YWx1ZTowIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2ZlbmNlLnZtYQo+PiArb3BlcmF0aW9ucyBw ZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHNmZW5jZS52bWEg b3BlcmF0aW9ucwo+PiArcGVuZGluZyBvbiB0aGUgaGFydC4KPj4gKwo+PiArV2hlbiB0aGUgc3N0 YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAxLCBpdCB0cmlnZ2VycyB0aGUgaGFyZHdhcmUgdG8g Y2hlY2sgaWYKPj4gK3RoZXJlIGFyZSBhbnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWlu ZyBwZW5kZWQuIFdoZW4gYWxsIG9wZXJhdGlvbnMgYXJlCj4+ICtmaW5pc2hlZCwgYSBUTEIgSW52 YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwgYmUgdHJpZ2dlcmVkCj4+ICsoc2VlIFNlY3Rp b25+XHJlZntzaXByZWd9KS4gV2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbiAw LCBpdCB3aWxsCj4+ICtjYXVzZSBub3RoaW5nLiBSZWFkaW5nIHNzdGF0dXM6VExCSUMgYml0IHdp bGwgYWxhd2F5cyByZXR1cm4gMC4KPj4gKwo+PiAgVGhlIFNQUCBiaXQgaW5kaWNhdGVzIHRoZSBw cml2aWxlZ2UgbGV2ZWwgYXQgd2hpY2ggYSBoYXJ0IHdhcyBleGVjdXRpbmcgYmVmb3JlCj4+ICBl bnRlcmluZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNl dCB0byAwIGlmIHRoZSB0cmFwCj4+ICBvcmlnaW5hdGVkIGZyb20gdXNlciBtb2RlLCBvciAxIG90 aGVyd2lzZS4gIFdoZW4gYW4gU1JFVCBpbnN0cnVjdGlvbgo+PiBAQCAtMzI5LDggKzM0OCwxMCBA QCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBjb250YWluaW5nIGludGVycnVwdCBlbmFi bGUgYml0cy4KPj4gIHtcZm9vdG5vdGVzaXplCj4+ICBcYmVnaW57Y2VudGVyfQo+PiAgXHNldGxl bmd0aHtcdGFiY29sc2VwfXs0cHR9Cj4+IC1cYmVnaW57dGFidWxhcn17S2NGY0ZjY30KPj4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPj4gK1xiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNGY2N9 Cj4+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4+ICtcaW5zdGJpdHsxM30gJgo+PiAr XGluc3RiaXRyYW5nZXsxMn17MTB9ICYKPj4gIFxpbnN0Yml0ezl9ICYKPj4gIFxpbnN0Yml0cmFu Z2V7OH17Nn0gJgo+PiAgXGluc3RiaXR7NX0gJgo+PiBAQCAtMzM5LDYgKzM2MCw4IEBAIFNYTEVO LWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcgaW50ZXJydXB0IGVuYWJsZSBiaXRz Lgo+PiAgXGluc3RiaXR7MH0gXFwKPj4gIFxobGluZQo+PiAgXG11bHRpY29sdW1uezF9e3xjfH17 XHdwcml9ICYKPj4gK1xtdWx0aWNvbHVtbnsxfXtjfH17U1RMQklQfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17fGN8fXtcd3ByaX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTRUlQfSAmCj4+ICBc bXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9 ICYKPj4gQEAgLTM0Niw3ICszNjksNyBAQCBTWExFTi1iaXQgcmVhZC93cml0ZSByZWdpc3RlciBj b250YWluaW5nIGludGVycnVwdCBlbmFibGUgYml0cy4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17 U1NJUH0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGluZQo+PiAt U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYgMSAmIDMg JiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxlbmR7Y2Vu dGVyfQo+PiAgfQo+PiBAQCAtMzU5LDggKzM4MiwxMCBAQCBTWExFTi0xMCAmIDEgJiAzICYgMSAm IDMgJiAxICYgMSBcXAo+PiAge1xmb290bm90ZXNpemUKPj4gIFxiZWdpbntjZW50ZXJ9Cj4+ICBc c2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPj4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ PiAtXGluc3RiaXRyYW5nZXtTWExFTi0xfXsxMH0gJgo+PiArXGJlZ2lue3RhYnVsYXJ9e0tjRmNG Y0ZjY30KPj4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPj4gK1xpbnN0Yml0ezEzfSAm Cj4+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+PiAgXGluc3RiaXR7OX0gJgo+PiAgXGluc3Ri aXRyYW5nZXs4fXs2fSAmCj4+ICBcaW5zdGJpdHs1fSAmCj4+IEBAIC0zNjksNiArMzk0LDggQEAg U1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxpbnN0Yml0ezB9IFxcCj4+ ICBcaGxpbmUKPj4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4+ICtcbXVsdGljb2x1 bW57MX17Y3x9e1NUTEJJRX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17XHdwcml9ICYKPj4g IFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3By aX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtTVElFfSAmCj4+IEBAIC0zNzYsNyArNDAzLDcg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxtdWx0aWNvbHVtbnsx fXtjfH17U1NJRX0gJgo+PiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gXFwKPj4gIFxobGlu ZQo+PiAtU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gK1NYTEVOLTE0ICYg MSAmIDMgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPj4gIFxlbmR7dGFidWxhcn0KPj4gIFxl bmR7Y2VudGVyfQo+PiAgfQo+PiBAQCAtNDEwLDYgKzQzNywxMiBAQCB3aGVuIHRoZSBTRUlFIGJp dCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzIGNsZWFyLiAgVGhlIGltcGxlbWVudGF0aW9u Cj4+ICBzaG91bGQgcHJvdmlkZSBmYWNpbGl0aWVzIHRvIG1hc2ssIHVubWFzaywgYW5kIHF1ZXJ5 IHRoZSBjYXVzZSBvZiBleHRlcm5hbAo+PiAgaW50ZXJydXB0cy4KPj4KPj4gK0Egc3VwZXJ2aXNv ci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IGlzIHBlbmRpbmcgaWYgdGhl IFNUTEJJUCBiaXQKPj4gK2luIHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2 aXNvci1sZXZlbCBUTEIgSW52YWxpZGF0ZSBmaW5pc2gKPj4gK2ludGVycnVwdHMgYXJlIGRpc2Fi bGVkIHdoZW4gdGhlIFNUTEJJRSBiaXQgaW4gdGhlIHtcdHQgc2llfSByZWdpc3RlciBpcyBjbGVh ci4KPj4gK1doZW4gaGFydCB0bGIgaW52YWxpZGF0ZSBvcGVyYXRpb25zIGFyZSBmaW5pc2hlZCwg aGFyZHdhcmUgd2lsbCBjaGFuZ2Ugc3N0YXR1czpUTEJJCj4+ICtiaXQgZnJvbSAxIHRvIDAgYW5k IHRyaWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPj4gKwo+PiAgXGJlZ2lu e2NvbW1lbnRhcnl9Cj4+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0gYW5kIHtcdHQKPj4gIG1pZX0gcmVnaXN0ZXJzLiAg UmVhZGluZyBhbnkgZmllbGQsIG9yIHdyaXRpbmcgYW55IHdyaXRhYmxlIGZpZWxkLCBvZiB7XHR0 Cj4+IEBAIC01OTgsNyArNjMxLDkgQEAgc28gaXMgb25seSBndWFyYW50ZWVkIHRvIGhvbGQgc3Vw cG9ydGVkIGV4Y2VwdGlvbiBjb2Rlcy4KPj4gICAgMSAgICAgICAgICYgNSAgICAgICAgICAgICAg ICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPj4gICAgMSAgICAgICAgICYgNi0tOCAg ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAgICAgICAgICYgOSAgICAgICAg ICAgICAgICYgU3VwZXJ2aXNvciBleHRlcm5hbCBpbnRlcnJ1cHQgXFwKPj4gLSAgMSAgICAgICAg ICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYg MTAtLTExICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gKyAgMSAgICAgICAgICYgMTIg ICAgICAgICAgICAgICYgU3VwZXJ2aXNvciBUTEJJIGZpbmlzaCBpbnRlcnJ1cHQgXFwKPj4gKyAg MSAgICAgICAgICYgMTMtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwKPj4gICAgMSAg ICAgICAgICYgJFxnZSQxNiAgICAgICAgICYge1xlbSBBdmFpbGFibGUgZm9yIHBsYXRmb3JtIHVz ZX0gXFwgXGhsaW5lCj4+ICAgIDAgICAgICAgICAmIDAgICAgICAgICAgICAgICAmIEluc3RydWN0 aW9uIGFkZHJlc3MgbWlzYWxpZ25lZCBcXAo+PiAgICAwICAgICAgICAgJiAxICAgICAgICAgICAg ICAgJiBJbnN0cnVjdGlvbiBhY2Nlc3MgZmF1bHQgXFwKPj4gQEAgLTg4NCw3ICs5MTksNyBAQCBw cm92aWRlZC4KPj4gIFxtdWx0aWNvbHVtbnsxfXtjfH17b3Bjb2RlfSBcXAo+PiAgXGhsaW5lCj4+ ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPj4gLVNGRU5DRS5WTUEgJiBhc2lkICYgdmFkZHIg JiBQUklWICYgMCAmIFNZU1RFTSBcXAo+PiArU0ZFTkNFLlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2 YWRkciAmIExPQ0FMICYgMCAmIFNZU1RFTSBcXAo+PiAgXGVuZHt0YWJ1bGFyfQo+PiAgXGVuZHtj ZW50ZXJ9Cj4+Cj4+IEBAIC04OTksMjEgKzkzNCw3MCBAQCBmcm9tIHRoYXQgaGFydCB0byB0aGUg bWVtb3J5LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzLgo+PiAgRnVydGhlciBkZXRhaWxzIG9u IHRoZSBiZWhhdmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+PiAgZGVzY3JpYmVkIGluIFNl Y3Rpb25+XHJlZnt2aXJ0LWNvbnRyb2x9IGFuZCBTZWN0aW9uflxyZWZ7cG1wLXZtZW19Lgo+Pgo+ PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLCB3aGljaCBtZWFucwo+PiArdGhhdCB0aGUgVExCIG9wZXJhdGlvbiBpcyBub3Qg Z3VhcmFudGVlZCB0byBjb21wbGV0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiByZXRpcmVzLgo+PiAr U29mdHdhcmUgbmVlZCBjaGVjayBzc3RhdHVzOlRMQkkgdG8gZGV0ZXJtaW5lIGFsbCBUTEIgb3Bl cmF0aW9ucyBjb21wbGV0ZS4KPj4gK1RoZSBzc3RhdHVzOlRMQkkgZGVzY3JpYmVkIGluIFNlY3Rp b25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZSBjaGFuZ2UKPj4gK3NzdGF0dXM6VExCSSBi aXQgZnJvbSAxIHRvIDAsIHRoZSBUTEIgSW52YWxpZGF0ZSBmaW5pc2ggaW50ZXJydXB0IHdpbGwg YmUKPj4gK3RyaWdnZXJlZC4KPj4gKwo+PiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4+IC1UaGUgU0ZF TkNFLlZNQSBpcyB1c2VkIHRvIGZsdXNoIGFueSBsb2NhbCBoYXJkd2FyZSBjYWNoZXMgcmVsYXRl ZCB0bwo+PiArVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3Rl IGhhcmR3YXJlIGNhY2hlcyByZWxhdGVkIHRvCj4+ICBhZGRyZXNzIHRyYW5zbGF0aW9uLiAgSXQg aXMgc3BlY2lmaWVkIGFzIGEgZmVuY2UgcmF0aGVyIHRoYW4gYSBUTEIKPj4gIGZsdXNoIHRvIHBy b3ZpZGUgY2xlYW5lciBzZW1hbnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoIGluc3RydWN0aW9u cwo+PiAgYXJlIGFmZmVjdGVkIGJ5IHRoZSBmbHVzaCBvcGVyYXRpb24gYW5kIHRvIHN1cHBvcnQg YSB3aWRlciB2YXJpZXR5IG9mCj4+ICBkeW5hbWljIGNhY2hpbmcgc3RydWN0dXJlcyBhbmQgbWVt b3J5LW1hbmFnZW1lbnQgc2NoZW1lcy4gIFNGRU5DRS5WTUEKPj4gIGlzIGFsc28gdXNlZCBieSBo aWdoZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4+IC13cml0 ZXMgYW5kIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLgo+PiArd3JpdGVzIGFuZCB0 aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4gVGhlcmUgaXMgYSBtb2RlIGJpdCB0byBk ZXRlcm1pbmUKPj4gK3NmZW5jZS52bWEgd291bGQgYnJvYWRjYXN0IG9uIGludGVyY29ubmVjdCBv ciBub3QuCj4+ICBcZW5ke2NvbW1lbnRhcnl9Cj4+Cj4+IC1TRkVOQ0UuVk1BIG9yZGVycyBvbmx5 IHRoZSBsb2NhbCBoYXJ0J3MgaW1wbGljaXQgcmVmZXJlbmNlcyB0byB0aGUKPj4gLW1lbW9yeS1t YW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xm b290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17Y0B7fUVA e31LfQo+PiArXGluc3RiaXR7MzF9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7MzB9ezl9ICYKPj4gK1xp bnN0Yml0cmFuZ2V7OH17MH0gXFwKPj4gK1xobGluZQo+PiArXG11bHRpY29sdW1uezF9e3xjfH17 e1x0dCBNT0RFfX0gJgo+PiArXG11bHRpY29sdW1uezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFn ZSB0YWJsZSl9fSAmCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IEFTSUR9fSBcXAo+PiAr XGhsaW5lCj4+ICsxICYgMjIgJiA5IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRl cn0KPj4gK30KPj4gK1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1h IHJzMiBmb3JtYXQufQo+PiArXGxhYmVse3J2MzJzYXRwfQo+PiArXGVuZHtmaWd1cmV9Cj4+ICsK Pj4gK1xiZWdpbntmaWd1cmV9W2ghXQo+PiAre1xmb290bm90ZXNpemUKPj4gK1xiZWdpbntjZW50 ZXJ9Cj4+ICtcYmVnaW57dGFidWxhcn17QHt9U0B7fVRAe31VfQo+PiArXGluc3RiaXRyYW5nZXs2 M317NjB9ICYKPj4gK1xpbnN0Yml0cmFuZ2V7NTl9ezE2fSAmCj4+ICtcaW5zdGJpdHJhbmdlezE1 fXswfSBcXAo+PiArXGhsaW5lCj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAm Cj4+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IFBQTiAocm9vdCBwYWdlIHRhYmxlKX19ICYK Pj4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e3tcdHQgQVNJRH19IFxcCj4+ICtcaGxpbmUKPj4gKzQg JiA0NCAmIDE2IFxcCj4+ICtcZW5ke3RhYnVsYXJ9Cj4+ICtcZW5ke2NlbnRlcn0KPj4gK30KPj4g K1x2c3BhY2V7LTAuMWlufQo+PiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQs IGZvciBNT0RFIHZhbHVlcywgb25seSBoaWdoZXN0IGJpdDo2MyBpcwo+PiArdmFsaWQgYW5kIG90 aGVycyBhcmUgcmVzZXJ2ZWQufQo+PiArXGxhYmVse3J2NjRzYXRwfQo+PiArXGVuZHtmaWd1cmV9 Cj4+Cj4+ICBcYmVnaW57Y29tbWVudGFyeX0KPj4gLUNvbnNlcXVlbnRseSwgb3RoZXIgaGFydHMg bXVzdCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICtUaGUgbW9kZSdzIGhpZ2hl c3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoIDE6YnJvYWRjYXN0 IG9yIDA6bG9jYWwuCj4+ICtJZiBvbmx5IGhhdmUgbW9kZTpsb2NhbCwgb3RoZXIgaGFydHMgbXVz dCBiZSBub3RpZmllZCBzZXBhcmF0ZWx5IHdoZW4gdGhlCj4+ICBtZW1vcnktbWFuYWdlbWVudCBk YXRhIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgo+PiAgT25lIGFwcHJvYWNoIGlzIHRv IHVzZSAxKQo+PiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBsb2NhbCB3cml0ZXMgYXJl IHZpc2libGUgZ2xvYmFsbHksIHRoZW4KPj4gQEAgLTkyOCw4ICsxMDEyLDE3IEBAIG1vZGlmaWVk IGZvciBhIHNpbmdsZSBhZGRyZXNzIG1hcHBpbmcgKGkuZS4sIG9uZSBwYWdlIG9yIHN1cGVycGFn ZSksIHtcZW0gcnMxfQo+PiAgY2FuIHNwZWNpZnkgYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRo YXQgbWFwcGluZyB0byBlZmZlY3QgYSB0cmFuc2xhdGlvbgo+PiAgZmVuY2UgZm9yIHRoYXQgbWFw cGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUKPj4g IHRyYW5zbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBoYXZlIG9ubHkgYmVlbiBtb2RpZmllZCBmb3Ig YSBzaW5nbGUgYWRkcmVzcy1zcGFjZQo+PiAtaWRlbnRpZmllciwge1xlbSByczJ9IGNhbiBzcGVj aWZ5IHRoZSBhZGRyZXNzIHNwYWNlLiAgVGhlIGJlaGF2aW9yIG9mCj4+IC1TRkVOQ0UuVk1BIGRl cGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4gK2lkZW50aWZp ZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBzcGFjZSB3aXRoIHtcdHQgc2F0 cH0gZm9ybWF0Cj4+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQ TiBpbmZvcm1hdGlvbi4KPj4gKwo+PiArXGJlZ2lue2NvbW1lbnRhcnl9Cj4+ICtXZSB1c2UgQVNJ RCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlIGFu ZCB0aGUgZm9ybWF0Cj4+ICtzdG9yZWQgaW4gcnMyIGlzIHNpbWlsYXIgd2l0aCB7XHR0IHNhdHB9 IGRlc2NyaWJlZCBpbiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+PiArQVNJRCBhcmUgdXNlZCBi eSBsb2NhbCBoYXJ0cyBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIG9mIHRoZSBhc2lkIGFyZSB1 c2VkIGJ5Cj4+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJT01NVS4KPj4gK1xl bmR7Y29tbWVudGFyeX0KPj4gKwo+PiArVGhlIGJlaGF2aW9yIG9mIFNGRU5DRS5WTUEgZGVwZW5k cyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcyBmb2xsb3dzOgo+Pgo+PiAgXGJlZ2lue2l0 ZW1pemV9Cj4+ICBcaXRlbSBJZiB7XGVtIHJzMX09e1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0 IHgwfSwgdGhlIGZlbmNlIG9yZGVycyBhbGwKPj4gQEAgLTkzOSwyMyArMTAzMiwxOCBAQCBTRkVO Q0UuVk1BIGRlcGVuZHMgb24ge1xlbSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPj4g ICAgICAgIGFsbCByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdl IHRhYmxlcywgYnV0IG9ubHkKPj4gICAgICAgIGZvciB0aGUgYWRkcmVzcyBzcGFjZSBpZGVudGlm aWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAgICAgICAgQWNjZXNzZXMgdG8g e1xlbSBnbG9iYWx9IG1hcHBpbmdzIChzZWUgU2VjdGlvbn5ccmVme3NlYzp0cmFuc2xhdGlvbn0p Cj4+IC0gICAgICBhcmUgbm90IG9yZGVyZWQuCj4+ICsgICAgICBhcmUgbm90IG9yZGVyZWQuIFRo ZSBtb2RlIGZpZWxkIGluIHJzMiBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxvY2FsLgo+PiAg XGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwg dGhlIGZlbmNlIG9yZGVycwo+PiAgICAgICAgb25seSByZWFkcyBhbmQgd3JpdGVzIG1hZGUgdG8g dGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nCj4+ICAgICAgICB0byB0aGUg dmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIGFsbCBhZGRyZXNzIHNwYWNlcy4KPj4g IFxpdGVtIElmIHtcZW0gcnMxfSRcbmVxJHtcdHQgeDB9IGFuZCB7XGVtIHJzMn0kXG5lcSR7XHR0 IHgwfSwgdGhlIGZlbmNlCj4+ICAgICAgICBvcmRlcnMgb25seSByZWFkcyBhbmQgd3JpdGVzIG1h ZGUgdG8gdGhlIGxlYWYgcGFnZSB0YWJsZSBlbnRyeQo+PiAgICAgICAgY29ycmVzcG9uZGluZyB0 byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9yIHRoZSBhZGRyZXNzCj4+IC0g ICAgICBzcGFjZSBpZGVudGlmaWVkIGJ5IGludGVnZXIgcmVnaXN0ZXIge1xlbSByczJ9Lgo+PiAr ICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2VyIHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhl IG1vZGUgZmllbGQgaW4gcnMyCj4+ICsgICAgICBpcyBkZXRlcm1pbmUgYnJvYWRjYXN0IG9yIGxv Y2FsLgo+PiAgICAgICAgQWNjZXNzZXMgdG8gZ2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJl ZC4KPj4gIFxlbmR7aXRlbWl6ZX0KPj4KPj4gLVdoZW4ge1xlbSByczJ9JFxuZXEke1x0dCB4MH0s IGJpdHMgU1hMRU4tMTpBU0lETUFYIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0KPj4gLXJzMn0g YXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3 YXJlIGFuZCBpZ25vcmVkCj4+IC1ieSBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4gIEZ1cnRoZXJt b3JlLCBpZiBBU0lETEVOfiQ8JH5BU0lETUFYLCB0aGUKPj4gLWltcGxlbWVudGF0aW9uIHNoYWxs IGlnbm9yZSBiaXRzIEFTSURNQVgtMTpBU0lETEVOIG9mIHRoZSB2YWx1ZSBoZWxkIGluIHtcZW0K Pj4gLXJzMn0uCj4+IC0KPj4gIFxiZWdpbntjb21tZW50YXJ5fQo+PiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSBhbmQK Pj4gIHRoZSBBU0lEIHZhbHVlIGluIHtcZW0gcnMyfSBhbmQgYWx3YXlzIHBlcmZvcm0gYSBnbG9i YWwgZmVuY2UuCj4+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBzYW1lIFNG RU5DRS5WTUEgaW5zdHJ1Y3Rpb24gd2hpbGUgYSBkaWZmZXJlbnQgQVNJRCBpcyBsb2FkZWQKPj4g IGludG8ge1x0dCBzYXRwfSwgcHJvdmlkZWQgdGhlIG5leHQgdGltZSB7XHR0IHNhdHB9IGlzIGxv YWRlZCB3aXRoIHRoZSByZWN5Y2xlZAo+PiAgQVNJRCwgaXQgaXMgc2ltdWx0YW5lb3VzbHkgbG9h ZGVkIHdpdGggdGhlIG5ldyBwYWdlIHRhYmxlLgo+Pgo+PiAtXGl0ZW0gSWYgdGhlIGltcGxlbWVu dGF0aW9uIGRvZXMgbm90IHByb3ZpZGUgQVNJRHMsIG9yIHNvZnR3YXJlIGNob29zZXMgdG8KPj4g K1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzIGFuZCBQ UE5zLCBvciBzb2Z0d2FyZSBjaG9vc2VzIHRvCj4+ICBhbHdheXMgdXNlIEFTSUQgMCwgdGhlbiBh ZnRlciBldmVyeSB7XHR0IHNhdHB9IHdyaXRlLCBzb2Z0d2FyZSBzaG91bGQgZXhlY3V0ZQo+PiAg U0ZFTkNFLlZNQSB3aXRoIHtcZW0gcnMxfT17XHR0IHgwfS4gIEluIHRoZSBjb21tb24gY2FzZSB0 aGF0IG5vIGdsb2JhbAo+PiAgdHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSBy czJ9IHNob3VsZCBiZSBzZXQgdG8gYSByZWdpc3RlciBvdGhlciB0aGFuCj4+IEBAIC0xMDAzLDEz ICsxMDkxLDE0IEBAIG5vdCBmbHVzaGVkLgo+Pgo+PiAgXGl0ZW0gSWYgc29mdHdhcmUgbW9kaWZp ZXMgYSBub24tbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlIFNGRU5DRS5WTUEgd2l0aAo+PiAg e1xlbSByczF9PXtcdHQgeDB9LiAgSWYgYW55IFBURSBhbG9uZyB0aGUgdHJhdmVyc2FsIHBhdGgg aGFkIGl0cyBHIGJpdCBzZXQsCj4+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3IKPj4gLXdoaWNoIHRo ZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3tcZW0gcnMyfSBtdXN0IGJlIHtc dHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lEIGFu ZAo+PiArcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGZvciB3aGljaCB0aGUgdHJhbnNsYXRpb24gaXMg YmVpbmcgbW9kaWZpZWQuCj4+Cj4+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIGxlYWYg UFRFLCBpdCBzaG91bGQgZXhlY3V0ZSBTRkVOQ0UuVk1BIHdpdGgge1xlbQo+PiAgcnMxfSBzZXQg dG8gYSB2aXJ0dWFsIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlLiAgSWYgYW55IFBURSBhbG9uZyB0 aGUgdHJhdmVyc2FsCj4+ICBwYXRoIGhhZCBpdHMgRyBiaXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBi ZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLCB7XGVtIHJzMn0KPj4gLXNob3VsZCBiZSBzZXQgdG8gdGhl IEFTSUQgZm9yIHdoaWNoIHRoZSB0cmFuc2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPj4gK3No b3VsZCBiZSBzZXQgdG8gdGhlIEFTSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBmb3Igd2hp Y2ggdGhlIHRyYW5zbGF0aW9uCj4+ICtpcyBiZWluZyBtb2RpZmllZC4KPj4KPj4gIFxpdGVtIEZv ciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhIGxl YWYgUFRFIGFuZAo+PiAgY2hhbmdpbmcgYW4gaW52YWxpZCBQVEUgdG8gYSB2YWxpZCBsZWFmLCBz b2Z0d2FyZSBtYXkgY2hvb3NlIHRvIGV4ZWN1dGUKPj4gLS0KPj4gMi43LjQKPj4KPj4KPj4gLT0t PS09LT0tPS09LT0tPS09LT0tPS0KPj4gTGlua3M6IFlvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBz ZW50IHRvIHRoaXMgZ3JvdXAuCj4+Cj4+IFZpZXcvUmVwbHkgT25saW5lICgjODEwKTogaHR0cHM6 Ly9saXN0cy5yaXNjdi5vcmcvZy90ZWNoLXByaXZpbGVnZWQvbWVzc2FnZS84MTAKPj4gTXV0ZSBU aGlzIFRvcGljOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9tdC8zNDE5ODk4Ni8xNjc3MjczCj4+ IEdyb3VwIE93bmVyOiB0ZWNoLXByaXZpbGVnZWQrb3duZXJAbGlzdHMucmlzY3Yub3JnCj4+IFVu c3Vic2NyaWJlOiBodHRwczovL2xpc3RzLnJpc2N2Lm9yZy9nL3RlY2gtcHJpdmlsZWdlZC91bnN1 YiAgW2FuZHJld0BzaWZpdmUuY29tXQo+PiAtPS09LT0tPS09LT0tPS09LT0tPS09LQo+PgoKCi0t IApCZXN0IFJlZ2FyZHMKIEd1byBSZW4KCk1MOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51 eC1jc2t5LwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=