From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.kernel.org ([198.145.29.99]:49360 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752048AbeCXPSf (ORCPT ); Sat, 24 Mar 2018 11:18:35 -0400 Date: Sat, 24 Mar 2018 15:18:29 +0000 From: Jonathan Cameron To: John Syne Cc: Rodrigo Siqueira , devel@driverdev.osuosl.org, Lars-Peter Clausen , linux-iio@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Peter Meerwald-Stadler , Hartmut Knaack , daniel.baluta@nxp.com Subject: Re: meter ABI: (was Re: [PATCH v2 1/3] staging:iio:meter: Replaces IIO_DEV_ATTR_CH_OFF by IIO_DEVICE_ATTR) Message-ID: <20180324151829.7d03ad15@archlinux> In-Reply-To: References: <3af0e5a795059a8418cf08ff29f05f8d5e00da9b.1520382753.git.rodrigosiqueiramelo@gmail.com> <20180307200730.08ed3c2f@archlinux> <20180309003733.aichruo53vqryafg@smtp.gmail.com> <20180310151045.4570e85d@archlinux> <79D3051B-FF2F-4DD3-AF75-F6A4BAD81838@gmail.com> <20180317203037.1093cc11@archlinux> <20180318122312.0d395367@archlinux> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-iio-owner@vger.kernel.org List-Id: linux-iio@vger.kernel.org On Mon, 19 Mar 2018 23:28:45 -0700 John Syne wrote: > Hi Jonathan, > > I broke out the {Direction}_{Type}_{Index}_{Modifier}_{Info_Mask} into separate columns to make sure I understand your instructions. Good way to check the results. > > Probably easier to copy and paste this table into a spreadsheet. Let me know if there is anything I got wrong. Thank you again for all your help. Yeah, we need to shrink this if we do it again. Can drop anything not related to ABI (so RW mask address etc and just have the register name and the bits around ABI. Note I mentioned the altvoltage stuff in the previous email, so we need to think about whether that is useful to distinguish the instantaneous measurements from the multi cycle AC ones. Actually I think we are fine here as we explicitly describe all alt measurements as mav or rms which going to be handled in our new computedvalue description. > > Address Register IIO Attribute Device Tree or Code Direction Type Index Modifier Info Mask R/W Bit Length Bit Length During Communications Type Default Value Description > 0x4380 AIGAIN in_current0_phaseA_scale in current 0 phaseA scale R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. > 0x4381 AVGAIN in_voltage0_phaseA_scale in voltage 0 phaseA scale R/W 24 32 ZPSE S 0x000000 Phase A voltage gain adjust. > 0x4382 BIGAIN in_current0_phaseB_scale in current 0 phaseB scale R/W 24 32 ZPSE S 0x000000 Phase B current gain adjust. > 0x4383 BVGAIN in_voltage0_phaseB_scale in voltage 0 phaseB scale R/W 24 32 ZPSE S 0x000000 Phase B voltage gain adjust. > 0x4384 CIGAIN in_current0_phaseC_scale in current 0 phaseC scale R/W 24 32 ZPSE S 0x000000 Phase C current gain adjust. > 0x4385 CVGAIN in_voltage0_phaseC_scale in voltage 0 phaseC scale R/W 24 32 ZPSE S 0x000000 Phase C voltage gain adjust. > 0x4386 NIGAIN in_current0_neutral_scale in current 0 neutral scale R/W 24 32 ZPSE S 0x000000 Neutral current gain adjust (ADE7868 and ADE7878 only). > 0x4387 AIRMSOS in_current0_phaseA_rms_offset in current 0 phaseA offset R/W 24 32 ZPSE S 0x000000 Phase A current rms offset. > 0x4388 AVRMSOS in_voltage0_phaseA_rms_offset in voltage 0 phaseA offset R/W 24 32 ZPSE S 0x000000 Phase A voltage rms offset. > 0x4389 BIRMSOS in_current0_phaseB_rms_offset in current 0 phaseB offset R/W 24 32 ZPSE S 0x000000 Phase B current rms offset. > 0x438A BVRMSOS in_voltage0_phaseB_rms_offset in voltage 0 phaseB offset R/W 24 32 ZPSE S 0x000000 Phase B voltage rms offset. > 0x438B CIRMSOS in_current0_phaseC_rms_offset in current 0 phaseC offset R/W 24 32 ZPSE S 0x000000 Phase C current rms offset. > 0x438C CVRMSOS in_voltage0_phaseC_rms_offset in voltage 0 phaseC offset R/W 24 32 ZPSE S 0x000000 Phase C voltage rms offset. > 0x438D NIRMSOS in_current0_neutral_rms_offset in current 0 neutral offset R/W 24 32 ZPSE S 0x000000 Neutral current rms offset (ADE7868 and ADE7878 only). > 0x438E AVAGAIN in_powerapparent0_phaseA_scale in powerapparent 0 phaseA scale R/W 24 32 ZPSE S 0x000000 Phase A apparent power gain adjust. > 0x438F BVAGAIN in_powerapparent0_phaseB_scale in powerapparent 0 phaseB scale R/W 24 32 ZPSE S 0x000000 Phase B apparent power gain adjust. > 0x4390 CVAGAIN in_powerapparent0_phaseC_scale in powerapparent 0 phaseC scale R/W 24 32 ZPSE S 0x000000 Phase C apparent power gain adjust. > 0x4391 AWGAIN in_power0_phaseA_scale in power 0 phaseA scale R/W 24 32 ZPSE S 0x000000 Phase A total active power gain adjust. > 0x4392 AWATTOS in_power0_phaseA_offset in power 0 phaseA offset R/W 24 32 ZPSE S 0x000000 Phase A total active power offset adjust. > 0x4393 BWGAIN in_power0_phaseB_scale in power 0 phaseB scale R/W 24 32 ZPSE S 0x000000 Phase B total active power gain adjust. > 0x4394 BWATTOS in_power0_phaseB_offset in power 0 phaseB offset R/W 24 32 ZPSE S 0x000000 Phase B total active power offset adjust. > 0x4395 CWGAIN in_power0_PhaseC_scale in power 0 phaseC scale R/W 24 32 ZPSE S 0x000000 Phase C total active power gain adjust. > 0x4396 CWATTOS in_power0_phaseC_offset in power 0 phaseC offset R/W 24 32 ZPSE S 0x000000 Phase C total active power offset adjust. > 0x4397 AVARGAIN in_powerreactive0_phaseA_scale in powerreactive 0 phaseA scale R/W 24 32 ZPSE S 0x000000 Phase A total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > 0x4398 AVAROS in_powerreactive0_phaseA_offset in powerreactive 0 phaseA offset R/W 24 32 ZPSE S 0x000000 Phase A total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > 0x4399 BVARGAIN in_powerreactive0_phaseB_scale in powerreactive 0 phaseB scale R/W 24 32 ZPSE S 0x000000 Phase B total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > 0x439A BVAROS in_powerreactive0_phaseB_offset in powerreactive 0 phaseB offset R/W 24 32 ZPSE S 0x000000 Phase B total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > 0x439B CVARGAIN in_powerreactive0_phaseC_scale in powerreactive 0 phaseC scale R/W 24 32 ZPSE S 0x000000 Phase C total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > 0x439C CVAROS in_powerreactive0_phaseC_offset in powerreactive 0 phaseC offset R/W 24 32 ZPSE S 0x000000 Phase C total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > 0x439D AFWGAIN in_power0_phaseA_fundamental_scale in power 0 phaseA_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase A fundamental active power gain adjust. Location reserved for ADE7854, ADE7858, and ADE7868. Hmm. Fundamental needs to be represented using a separate channel index and description of the frequency filters applied. That should map it a generic way. I assume we will at some point have fundamental RMS? > 0x439E AFWATTOS in_power0_phaseA_fundamental_offset in power 0 phaseA_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase A fundamental active power offset adjust. Location reserved for ADE7854, ADE7858, and ADE7868. > 0x439F BFWGAIN in_power0_phaseB_fundamental_scale in power 0 phaseB_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase B fundamental active power gain adjust (ADE7878 only). > 0x43A0 BFWATTOS in_power0_phaseB_fundamental_offset in power 0 phaseB_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase B fundamental active power offset adjust (ADE7878 only). > 0x43A1 CFWGAIN in_power0_phaseC_fundamental_scale in power 0 phaseC_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase C fundamental active power gain adjust. > 0x43A2 CFWATTOS in_power0_phaseC_fundamental_offset in power 0 phaseC_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase C fundamental active power offset adjust (ADE7878 only). > 0x43A3 AFVARGAIN in_powerreactive0_phaseA_fundamental_scale in powerreactive 0 phaseA_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase A fundamental reactive power gain adjust (ADE7878 only). > 0x43A4 AFVAROS in_powerreactive0_phaseA_fundamental_offset in powerreactive 0 phaseA_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase A fundamental reactive power offset adjust (ADE7878 only). > 0x43A5 BFVARGAIN in_powerreactive0_phaseB_fundamental_scale in powerreactive 0 phaseB_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase B fundamental reactive power gain adjust (ADE7878 only). > 0x43A6 BFVAROS in_powerreactive0_phaseB_fundamental_offset in powerreactive 0 phaseB_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase B fundamental reactive power offset adjust (ADE7878 only). > 0x43A7 CFVARGAIN in_powerreactive0_phaseC_fundamental_scale in powerreactive 0 phaseC_fundamental scale R/W 24 32 ZPSE S 0x000000 Phase C fundamental reactive power gain adjust (ADE7878 only). > 0x43A8 CFVAROS in_powerreactive0_phaseC_fundamental_offset in powerreactive 0 phaseC_fundamental offset R/W 24 32 ZPSE S 0x000000 Phase C fundamental reactive power offset adjust (ADE7878 only). >>From further versions drop anything we aren't exposing to userspace. Makes this easier to read. > 0x43A9 VATHR1 VATHR1 DT in R/W 24 32 ZP U 0x000000 Most significant 24 bits of VATHR[47:0] threshold used in phase apparent power datapath. > 0x43AA VATHR0 VATHR0 DT in R/W 24 32 ZP U 0x000000 Less significant 24 bits of VATHR[47:0] threshold used in phase apparent power datapath. > 0x43AB WTHR1 WTHR1 DT in R/W 24 32 ZP U 0x000000 Most significant 24 bits of WTHR[47:0] threshold used in phase total/fundamental active power datapath. > 0x43AC WTHR0 WTHR0 DT in R/W 24 32 ZP U 0x000000 Less significant 24 bits of WTHR[47:0] threshold used in phase total/fundamental active power datapath. > 0x43AD VARTHR1 VARTHR1 DT in R/W 24 32 ZP U 0x000000 Most significant 24 bits of VARTHR[47:0] threshold used in phase total/fundamental reactive power datapath (ADE7858, ADE7868, and ADE7878). > 0x43AE VARTHR0 VARTHR0 DT in R/W 24 32 ZP U 0x000000 Less significant 24 bits of VARTHR[47:0] threshold used in phase total/fundamental reactive power datapath (ADE7858, ADE7868, and ADE7878). > 0x43AF Reserved Reserved N/A4 N/A4 N/A4 N/A4 0x000000 This memory location should be kept at 0x000000 for proper operation. > 0x43B0 VANOLOAD VANOLOAD DT in R/W 24 32 ZPSE S 0x0000000 No load threshold in the apparent power datapath. > 0x43B1 APNOLOAD APNOLOAD DT in R/W 24 32 ZPSE S 0x0000000 No load threshold in the total/fundamental active power datapath. > 0x43B3 VLEVEL VLEVEL DT in R/W 24 32 ZPSE S 0x000000 Register used in the algorithm that computes the fundamental active and reactive powers (ADE7878 only). > 0x43B5 DICOEFF DICOEFF DT in R/W 24 32 ZPSE S 0x0000000 Register used in the digital integrator algorithm. If the integrator is turned on, it must be set at 0xFF8000. In practice, it is transmitted as 0xFFF8000. > 0x43B6 HPFDIS HPFDIS DT in R/W 24 32 ZP U 0x000000 Disables/enables the HPF in the current datapath (see Table 34). > 0x43B8 ISUMLVL ISUMLVL in R/W 24 32 ZPSE S 0x000000 Threshold used in comparison between the sum of phase currents and the neutral current (ADE7868 and ADE7878 only). > 0x43BF ISUM in_current0_phaseA&phaseB&phaseC_sum in current 0 phaseA&phaseB&phaseC sum R 28 32 ZP S N/A4 Sum of IAWV, IBWV, and ICWV registers (ADE7868 and ADE7878 only). Hehe, I'll get compaints about defining very long ABI again. Pah, it says what it does on the tin. > 0x43C0 AIRMS in_current0_phaseA_rms in current 0 phaseA_rms R 24 32 ZP S N/A4 Phase A current rms value. in_current0_phaseA_rms_raw as otherwise we don't know we need to apply in_current0_phaseA_rms_scale to it (or the shared value that maps to that). > 0x43C1 AVRMS in_voltage0_phaseA_rms in voltage 0 phaseA_rms R 24 32 ZP S N/A4 Phase A voltage rms value. > 0x43C2 BIRMS in_current0_phaseB_rms in current 0 phaseB_rms R 24 32 ZP S N/A4 Phase B current rms value. > 0x43C3 BVRMS in_voltage0_phaseB_rms in voltage 0 phaseB_rms R 24 32 ZP S N/A4 Phase B voltage rms value. > 0x43C4 CIRMS in_current0_phaseC_rms in current 0 phaseC_rms R 24 32 ZP S N/A4 Phase C current rms value. > 0x43C5 CVRMS in_voltage0_phaseC_rms in voltage 0 phaseC_rms R 24 32 ZP S N/A4 Phase C voltage rms value. > 0x43C6 NIRMS in_current0_neutral_rms in current 0 neutral_rms R 24 32 ZP S N/A4 Neutral current rms value (ADE7868 and ADE7878 only). > 0xE228 Run Code in R/W 16 16 U 0x0000 Run register starts and stops the DSP. See the Digital Signal Processor section for more details. > 0xE400 AWATTHR in_energy0_phaseA_raw in energy 0 phaseA raw R 32 32 S 0x00000000 Phase A total active energy accumulation. > 0xE401 BWATTHR in_energy0_phaseB_raw in energy 0 phaseB raw R 32 32 S 0x00000000 Phase B total active energy accumulation. > 0xE402 CWATTHR in_energy0_phaseC_raw in energy 0 phaseC raw R 32 32 S 0x00000000 Phase C total active energy accumulation. > 0xE403 AFWATTHR in_energy0_phaseA_fundamental_raw in energy 0 phaseA_fundamental raw R 32 32 S 0x00000000 Phase A fundamental active energy accumulation (ADE7878 only). > 0xE404 BFWATTHR in_energy0_phaseB_fundamental_raw in energy 0 phaseB_fundamental raw R 32 32 S 0x00000000 Phase B fundamental active energy accumulation (ADE7878 only). > 0xE405 CFWATTHR in_energy0_phaseC_fundamental_raw in energy 0 phaseC_fundamental raw R 32 32 S 0x00000000 Phase C fundamental active energy accumulation (ADE7878 only). > 0xE406 AVARHR in_energyreactive0_phaseA_raw in energyreactive 0 phaseA raw R 32 32 S 0x00000000 Phase A total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > 0xE407 BVARHR in_energyreactive0_phaseB_raw in energyreactive 0 phaseB raw R 32 32 S 0x00000000 Phase B total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > 0xE408 CVARHR in_energyreactive0_phaseC_raw in energyreactive 0 phaseC raw R 32 32 S 0x00000000 Phase C total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > 0xE409 AFVARHR in_energyreactive0_phaseA_fundamental_raw in energyreactive 0 phaseA_fundamental raw R 32 32 S 0x00000000 Phase A fundamental reactive energy accumulation (ADE7878 only). > 0xE40A BFVARHR in_energyreactive0_phaseB_fundamental_raw in energyreactive 0 phaseB_fundamental raw R 32 32 S 0x00000000 Phase B fundamental reactive energy accumulation (ADE7878 only). > 0xE40B CFVARHR in_energyreactive0_phaseC_fundamental_raw in energyreactive 0 phaseC_fundamental raw R 32 32 S 0x00000000 Phase C fundamental reactive energy accumulation (ADE7878 only). > 0xE40C AVAHR in_energyapparent0_phaseA_raw in energyapparent 0 phaseA raw R 32 32 S 0x00000000 Phase A apparent energy accumulation. > 0xE40D BVAHR in_energyapparent0_phaseB_raw in energyapparent 0 phaseB raw R 32 32 S 0x00000000 Phase B apparent energy accumulation. > 0xE40E CVAHR in_energyapparent0_phaseC_raw in energyapparent 0 phaseC raw R 32 32 S 0x00000000 Phase C apparent energy accumulation. > 0xE500 IPEAK in_current0_peak in current 0 peak R 32 32 U N/A Current peak register. See Figure 50 and Table 35 for details about its composition. > 0xE501 VPEAK in_voltage0_peak in voltage 0 peak R 32 32 U N/A Voltage peak register. See Figure 50 and Table 36 for details about its composition. > 0xE502 STATUS0 mapped to events event in status 0 raw R/W 32 32 U N/A Interrupt Status Register 0. See Table 37. > 0xE503 STATUS1 mapped to events event in status 1 raw R/W 32 32 U N/A Interrupt Status Register 1. See Table 38. > 0xE504 AIMAV in_current0_phaseA_mav in current phaseA_mav R 20 32 ZP U N/A Phase A current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). in_current0_phaseA_mav_raw > 0xE505 BIMAV in_current0_phaseB_mav in current phaseB_mav R 20 32 ZP U N/A Phase B current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). > 0xE506 CIMAV in_current0_phaseC_mav in current phaseC_mav R 20 32 ZP U N/A Phase C current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). > 0xE507 OILVL OILVL DT in R/W 24 32 ZP U 0xFFFFFF Overcurrent threshold. > 0xE508 OVLVL OVLVL DT in R/W 24 32 ZP U 0xFFFFFF Overvoltage threshold. > 0xE509 SAGLVL SAGLVL DT in R/W 24 32 ZP U 0x000000 Voltage SAG level threshold. > 0xE50A MASK0 in_mask0_raw in mask 0 raw R/W 32 32 U 0x00000000 Interrupt Enable Register 0. See Table 39. > 0xE50B MASK1 in_mask1_raw in mask 1 raw R/W 32 32 U 0x00000000 Interrupt Enable Register 1. See Table 40. > 0xE50C IAWV in_current0_phaseA_instantaneous in current phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A current. As mentioned before. This is the 'expectation' for in_currentX So it is the other case we need to represent by describing filtering or using the altvoltage equivalent. > 0xE50D IBWV in_current0_phaseB_instantaneous in current phaseB instantaneous R 24 32 SE S N/A Instantaneous value of Phase B current. > 0xE50E ICWV in_current0_phaseC_instantaneous in current phaseC instantaneous R 24 32 SE S N/A Instantaneous value of Phase C current. > 0xE50F INWV in_current0_phaseN_instantaneous in current neutral instantaneous R 24 32 SE S N/A Instantaneous value of neutral current (ADE7868 and ADE7878 only). > 0xE510 VAWV in_voltage0_phaseA_instantaneous in voltage phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A voltage. > 0xE511 VBWV in_voltage0_phaseB_instantaneous in voltage phaseB instantaneous R 24 32 SE S N/A Instantaneous value of Phase B voltage. > 0xE512 VCWV in_voltage0_phaseC_instantaneous in voltage phaseC instantaneous R 24 32 SE S N/A Instantaneous value of Phase C voltage. > 0xE513 AWATT in_power0_phaseA_instantaneous in power phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A total active power. > 0xE514 BWATT in_power0_phaseB_instantaneous in power phaseB instantaneous R 24 32 SE S N/A Instantaneous value of Phase B total active power. > 0xE515 CWATT in_power0_phaseC_instantaneous in power phaseC instantaneous R 24 32 SE S N/A Instantaneous value of Phase C total active power. > 0xE516 AVAR in_powerreactive0_phaseA_instantaneous in powerreactive phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A total reactive power (ADE7858, ADE7868, and ADE7878 only). > 0xE517 BVAR in_powerreactive0_phaseB_instantaneous in powerreactive phaseB instantaneous R 24 32 SE S N/A Instantaneous value of Phase B total reactive power (ADE7858, ADE7868, and ADE7878 only). > 0xE518 CVAR in_powerreactive0_phaseC_instantaneous in powerreactive phaseC instantaneous R 24 32 SE S N/A Instantaneous value of Phase C total reactive power (ADE7858, ADE7868, and ADE7878 only). > 0xE519 AVA in_powerapparent0_phaseA_instantaneous in powerapparent phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A apparent power. > 0xE51A BVA in_powerapparent0_phaseB_instantaneous in powerapparent phaseB instantaneous R 24 32 SE S N/A Instantaneous value of Phase B apparent power. > 0xE51B CVA in_powerappatent0_phaseC_instantaneous in powerapparent phaseC instantaneous R 24 32 SE S N/A Instantaneous value of Phase C apparent power. > 0xE51F CHECKSUM register_CHECKSUM Code in R 32 32 U 0x33666787 Checksum verification. See the Checksum Register section for details. > 0xE520 VNOM in_voltage0_phase_rms_nominal in voltage phase_rms nominal R/W 24 32 ZP S 0x000000 Nominal phase voltage rms used in the alternative computation of the apparent power. When the VNOMxEN bit is set, the applied voltage input in the corresponding phase is ignored and all corresponding rms voltage instances are replaced by the value in the VNOM register. This one is an oddity. I'm not sure we want to expose it to userspace at all. > 0xE600 PHSTATUS mapped to events event in R 16 16 U N/A Phase peak register. See Table 41. > 0xE601 ANGLE0 ANGLE0 DT in R 16 16 U N/A Time Delay 0. See the Time Interval Between Phases section for details. > 0xE602 ANGLE1 ANGLE1 DT in R 16 16 U N/A Time Delay 1. See the Time Interval Between Phases section for details. > 0xE603 ANGLE2 ANGLE2 DT in R 16 16 U N/A Time Delay 2. See the Time Interval Between Phases section for details. > 0xE604 to 0xE606 Reserved These addresses should not be written for proper operation. > 0xE607 PERIOD in_period_raw in period raw R 16 16 U N/A Network line period. > 0xE608 PHNOLOAD mapped to events event in R 16 16 U N/A Phase no load register. See Table 42. > 0xE60C LINECYC in_count0_cycle in count 0 cycle raw R/W 16 16 U 0xFFFF Line cycle accumulation mode count. > 0xE60D ZXTOUT ZXTOUT DT in R/W 16 16 U 0xFFFF Zero-crossing timeout count. > 0xE60E COMPMODE COMPMODE DT in R/W 16 16 U 0x01FF Computation-mode register. See Table 43. > 0xE60F Gain Gain DT in R/W 16 16 U 0x0000 PGA gains at ADC inputs. See Table 44. > 0xE610 CFMODE CFMODE DT in R/W 16 16 U 0x0E88 CFx configuration register. See Table 45. > 0xE611 CF1DEN CF1DEN DT in R/W 16 16 U 0x0000 CF1 denominator. > 0xE612 CF2DEN CF2DEN DT in R/W 16 16 U 0x0000 CF2 denominator. > 0xE613 CF3DEN CF3DEN DT in R/W 16 16 U 0x0000 CF3 denominator. > 0xE614 APHCAL APHCAL DT in R/W 10 16 ZP S 0x0000 Phase calibration of Phase A. See Table 46. > 0xE615 BPHCAL BPHCAL DT in R/W 10 16 ZP S 0x0000 Phase calibration of Phase B. See Table 46. > 0xE616 CPHCAL CPHCAL DT in R/W 10 16 ZP S 0x0000 Phase calibration of Phase C. See Table 46. > 0xE617 PHSIGN PHSIGN DT in R 16 16 U N/A Power sign register. See Table 47. > 0xE618 CONFIG CONFIG DT in R/W 16 16 U 0x0000 ADE7878 configuration register. See Table 48. > 0xE700 MMODE MMODE DT in R/W 8 8 U 0x1C Measurement mode register. See Table 49. > 0xE701 ACCMODE ACCMODE DT in R/W 8 8 U 0x00 Accumulation mode register. See Table 50. > 0xE702 LCYCMODE LCYCMODE DT in R/W 8 8 U 0x78 Line accumulation mode behavior. See Table 52. > 0xE703 PEAKCYC PEAKCYC DT in R/W 8 8 U 0x00 Peak detection half line cycles. > 0xE704 SAGCYC SAGCYC DT in R/W 8 8 U 0x00 SAG detection half line cycles. > 0xE705 CFCYC CFCYC DT in R/W 8 8 U 0x01 Number of CF pulses between two consecutive energy latches. See the Synchronizing Energy Registers with CFx Outputs section. > 0xE706 HSDC_CFG HSDC_CFG DT in R/W 8 8 U 0x00 HSDC configuration register. See Table 53. > 0xE707 Version in_version_raw in version raw R 8 8 U Version of die. > 0xEBFF Reserved DT in 8 8 This address can be used in manipulating the SS/HSA pin when SPI is chosen as the active port. See the Serial Interfaces section for details. > 0xEC00 LPOILVL LPOILVL DT in R/W 8 8 U 0x07 "Overcurrent threshold used during PSM2 mode (ADE7868 and ADE7878 only). See Table 54 in which the register is detailed.” > 0xEC01 CONFIG2 CONFIG2 DT in R/W 8 8 U 0x00 Configuration register used during PSM1 mode. See Table 55. So other than fundamental, instantaneous and the distinction between what would be considered DC measurements and AC ones (over several cycles) that all looks good to me ;) So in brief, I don't think we need instantaneous at all. Fundamental should be done as a parallel channel (different index) with the filters described to make it fundamental only. So next step may be proposing the core changes to add the handling for computed values and change the events description to allow for events based on them. We do that with some examples added to the dummy driver (so anyone can play with it without hardware). After that we can start moving the driver over by adding the basic channels and then building up to support all the oddities (dropping the custom attributes as we go). It's a big job so fingers crossed. Thanks, Jonathan > > Regards, > John > > > > > > > On Mar 18, 2018, at 5:23 AM, Jonathan Cameron wrote: > > > > On Sat, 17 Mar 2018 23:11:45 -0700 > > John Syne wrote: > > > >> Hi Jonathan, > > Hi John and All, > > > > I'd love to get some additional input on this from anyone interested. > > There are a lot of weird and wonderful derived quantities in an energy > > meter and it seems we need to make some fundamental changes to support > > them - including potentially a userspace breaking change to the event > > code description. > > > >> > >> Here is the complete list of registers for the ADE7878 which I copied from the data sheet. I added a column “IIO Attribute” which I hope follows your IIO ABI. Please make any changes you feel are incorrect. BTW, there are several registers that cannot be generalized and are used purely for chip configuration. I think we should add a new naming convention, namely {register}_{}. Also, I see in the sys_bus_iio doc > >> in_accel_x_peak_raw > >> > >> so shouldn’t the phase be represented as follows: > >> > >> in_current_A_scale > > I'm still confused. What does A represent here? I assumed that was a wild > > card for the channel number before but clearly not. > > > > Ah, you are labelling the 3 separate phases as A, B and C. Hmm. > > I guess they sort of look like axis, and sort of like independent channels. > > So could be indexed or done via modifiers depending on how you look at it. > > > > Hmm. With neutral in there as well I guess we need to make them > > modifiers (but might change my mind later ;) > > > > Particularly as we are using the the modifier for RMS under the previous > > plan... It appears we should treat that instead like we did for peak > > and do it as an additional info mask element. The problem with doing that > > on a continuous measurement is that we can't treat it as a channel to > > be output through the buffered interface. > > > > So again we have run out of space. It's increasingly looking like we need > > room for another field in the events - to cleanly represent computed values. > > > > Hmm. What is the current usage? - it's been a while so I had to go > > look in the header. > > > > 0-15 Channel (lots of channels) > > 31-16 Channel 2 (36 modifiers - lots of channels) > > 47-32 Channel Type (31 used so far - this looks most likely to run out of > > space in the long run so leave this one alone). > > 54-48 Event Direction (4 used) > > 55 Differential (1: channel 2 as differential pair 0: as a modifier) > > 63-56 Event Type (6 used) > > > > So I think we can pinch bit 53 as another flag to indicate we have > > a computed value or possibly bit 63 as event types are few and > > far between as well. > > > > Probably reasonable to assume we never have 16 bits worth > > of channels and computed channels at the same time? > > Hence I think we can steal bits off the top of Channel. > > How many do we need? Not sure unfortunately but feels like > > 8 should be plenty. > > > > The other element of this is we add a new field to iio_chan_spec > > to contain 'derived_type' or something like that which has > > rms and sum squared etc. Over time we can move some of those > > from the modifiers and free up a few entires there. > > So modifier might be "X and Y and Z" with a derived_type of > > sum_squared to give existing sum_squared_x_y_z but no > > rush on that. > > > > Anyhow so now we have an extra element to play that will result > > in a different channel. > > > > Whilst here we should think about any other mods needed to > > that event structure. It is a little unfortunate that this > > will be a breaking change for any old userspace code playing > > with new drivers but it can't be helped as we didn't have > > reserved values in the original definition (oops). > > > > At somepoint we may need to add the 'shared by derived_value' > > info mask but I think we can ignore that for now (seems > > moderately unlikely to have anything in it!) > >> > >> But for now, I followed your instructions from your reply. > >> > >> After finalizing this one, I will work on the ADE9000, which as way more registers ;-) > >> > >> Once we can agree on the register naming, I will update the ADE7854 driver for Rodrigo, which will go a long way to getting it out of staging. > > I'll edit to fit with new scheme and insert indexes which I think would be > > preferred though optional under the ABI as we only have one of each type/ > >> > >> Address Register IIO Attribute R/W Bit Length Bit Length During Communications Type Default Value Description > >> 0x4380 AIGAIN in_current0_phaseA_scale R/W 24 32 ZPSE S 0x000000 Phase A current gain adjust. > > A, B, C, N aren't obvious to the lay reader so I suggest we burn a few characters and stick phase in for ABC and just have neutral for > > the neutral one. Not sure about capitalization or not though. > > > >> 0x4381 AVGAIN in_voltage0_phaseA_scale R/W 24 32 ZPSE S 0x000000 Phase A voltage gain adjust. > >> 0x4382 BIGAIN in_current0_phaseB_scale R/W 24 32 ZPSE S 0x000000 Phase B current gain adjust. > >> 0x4383 BVGAIN in_voltage0_phaseB_scale R/W 24 32 ZPSE S 0x000000 Phase B voltage gain adjust. > >> 0x4384 CIGAIN in_current0_phaseC_scale R/W 24 32 ZPSE S 0x000000 Phase C current gain adjust. > >> 0x4385 CVGAIN in_voltage0_phaseC_scale R/W 24 32 ZPSE S 0x000000 Phase C voltage gain adjust. > >> 0x4386 NIGAIN in_current0_neutral_scale R/W 24 32 ZPSE S 0x000000 Neutral current gain adjust (ADE7868 and ADE7878 only). > >> 0x4387 AIRMSOS in_current0_phaseA_rms_offset R/W 24 32 ZPSE S 0x000000 Phase A current rms offset. > >> 0x4388 AVRMSOS in_voltage0_phaseA_rms_offset R/W 24 32 ZPSE S 0x000000 Phase A voltage rms offset. > >> 0x4389 BIRMSOS in_current0_phaseB_rms_offset R/W 24 32 ZPSE S 0x000000 Phase B current rms offset. > >> 0x438A BVRMSOS in_voltage0_phaseB_rms_offset R/W 24 32 ZPSE S 0x000000 Phase B voltage rms offset. > >> 0x438B CIRMSOS in_current0_phaseC_rms_offset R/W 24 32 ZPSE S 0x000000 Phase C current rms offset. > >> 0x438C CVRMSOS in_voltage0_phaseC_rms_offset R/W 24 32 ZPSE S 0x000000 Phase C voltage rms offset. > >> 0x438D NIRMSOS in_current0_neutral_rms_offset R/W 24 32 ZPSE S 0x000000 Neutral current rms offset (ADE7868 and ADE7878 only). > >> 0x438E AVAGAIN in_powerapparent0_phaseA_scale R/W 24 32 ZPSE S 0x000000 Phase A apparent power gain adjust. > >> 0x438F BVAGAIN in_powerapparent0_phaseB_scale R/W 24 32 ZPSE S 0x000000 Phase B apparent power gain adjust. > >> 0x4390 CVAGAIN in_powerapparent0_phaseC_scale R/W 24 32 ZPSE S 0x000000 Phase C apparent power gain adjust. > >> 0x4391 AWGAIN in_power0_phaseA_scale R/W 24 32 ZPSE S 0x000000 Phase A total active power gain adjust. > >> 0x4392 AWATTOS in_power0_phaseA_offset R/W 24 32 ZPSE S 0x000000 Phase A total active power offset adjust. > >> 0x4393 BWGAIN in_power0_phaseB_scale R/W 24 32 ZPSE S 0x000000 Phase B total active power gain adjust. > >> 0x4394 BWATTOS in_power0_phaseB_offset R/W 24 32 ZPSE S 0x000000 Phase B total active power offset adjust. > >> 0x4395 CWGAIN in_power0_PhaseC_scale R/W 24 32 ZPSE S 0x000000 Phase C total active power gain adjust. > >> 0x4396 CWATTOS in_power0_phaseC_offset R/W 24 32 ZPSE S 0x000000 Phase C total active power offset adjust. > >> 0x4397 AVARGAIN in_powerreactive0_phaseA_scale R/W 24 32 ZPSE S 0x000000 Phase A total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > >> 0x4398 AVAROS in_powerreactive0_phaseA_offset R/W 24 32 ZPSE S 0x000000 Phase A total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > >> 0x4399 BVARGAIN in_powerreactive0_phaseB_scale R/W 24 32 ZPSE S 0x000000 Phase B total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > >> 0x439A BVAROS in_powerreactive0_phaseB_offset R/W 24 32 ZPSE S 0x000000 Phase B total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > >> 0x439B CVARGAIN in_powerreactive0_phaseC_scale R/W 24 32 ZPSE S 0x000000 Phase C total reactive power gain adjust (ADE7858, ADE7868, and ADE7878). > >> 0x439C CVAROS in_powerreactive0_phaseC_offset R/W 24 32 ZPSE S 0x000000 Phase C total reactive power offset adjust (ADE7858, ADE7868, and ADE7878). > >> 0x439D AFWGAIN in_power0_phaseA_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase A fundamental active power gain adjust. Location reserved for ADE7854, ADE7858, and ADE7868. > > Hmm. fundamental is the oddity here. I here because it is sort of a derived value > > and sort of a filter applied. Can it be sensible combined with RMS? probably not but > > it can be combined with peak for example (which I'd also ideally move into > > the derived representation.). > > > >> 0x439E AFWATTOS in_power0_phaseA_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase A fundamental active power offset adjust. Location reserved for ADE7854, ADE7858, and ADE7868. > >> 0x439F BFWGAIN in_power0_phaseB_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase B fundamental active power gain adjust (ADE7878 only). > >> 0x43A0 BFWATTOS in_power0_phaseB_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase B fundamental active power offset adjust (ADE7878 only). > >> 0x43A1 CFWGAIN in_power0_phaseC_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase C fundamental active power gain adjust. > >> 0x43A2 CFWATTOS in_power0_phaseC_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase C fundamental active power offset adjust (ADE7878 only). > >> 0x43A3 AFVARGAIN in_powerreactive0_phaseA_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase A fundamental reactive power gain adjust (ADE7878 only). > >> 0x43A4 AFVAROS in_powerreactive0_phaseA_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase A fundamental reactive power offset adjust (ADE7878 only). > >> 0x43A5 BFVARGAIN in_powerreactive0_phaseB_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase B fundamental reactive power gain adjust (ADE7878 only). > >> 0x43A6 BFVAROS in_powerreactive0_phaseB_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase B fundamental reactive power offset adjust (ADE7878 only). > >> 0x43A7 CFVARGAIN in_powerreactive0_phaseC_fundamental_scale R/W 24 32 ZPSE S 0x000000 Phase C fundamental reactive power gain adjust (ADE7878 only). > >> 0x43A8 CFVAROS in_powerreactive0_phaseC_fundamental_offset R/W 24 32 ZPSE S 0x000000 Phase C fundamental reactive power offset adjust (ADE7878 only). > >> 0x43A9 VATHR1 regiister_VATHR1 R/W 24 32 ZP U 0x000000 Most significant 24 bits of VATHR[47:0] threshold used in phase apparent power datapath. > > Do not expose these to userspace. Why would it care? > > > >> 0x43AA VATHR0 register_VATHR0 R/W 24 32 ZP U 0x000000 Less significant 24 bits of VATHR[47:0] threshold used in phase apparent power datapath. > >> 0x43AB WTHR1 register_WTHR1 R/W 24 32 ZP U 0x000000 Most significant 24 bits of WTHR[47:0] threshold used in phase total/fundamental active power datapath. > >> 0x43AC WTHR0 register_WTHR0 R/W 24 32 ZP U 0x000000 Less significant 24 bits of WTHR[47:0] threshold used in phase total/fundamental active power datapath. > >> 0x43AD VARTHR1 register_VARTHR1 R/W 24 32 ZP U 0x000000 Most significant 24 bits of VARTHR[47:0] threshold used in phase total/fundamental reactive power datapath (ADE7858, ADE7868, and ADE7878). > >> 0x43AE VARTHR0 register_VARTHR0 R/W 24 32 ZP U 0x000000 Less significant 24 bits of VARTHR[47:0] threshold used in phase total/fundamental reactive power datapath (ADE7858, ADE7868, and ADE7878). > >> 0x43AF Reserved N/A4 N/A4 N/A4 N/A4 0x000000 This memory location should be kept at 0x000000 for proper operation. > >> 0x43B0 VANOLOAD register_VANOLOAD R/W 24 32 ZPSE S 0x0000000 No load threshold in the apparent power datapath. > > This one is kind of an event parameter, but one that controls internal creep prevention. > > This will be a driver specific attr I think for now. We may add it to info_mask > > later if we get lots of meter drivers. > > Something like > > in_power0_no_load_thresh though I haven't really thought about it or looked > > for similar precedence. > > > > > >> 0x43B1 APNOLOAD register_APNOLOAD R/W 24 32 ZPSE S 0x0000000 No load threshold in the total/fundamental active power datapath. > > in_activepower0_no_load_thresh > >> 0x43B2 VARNOLOAD register_VARNOLOAD R/W 24 32 ZPSE S 0x0000000 No load threshold in the total/fundamental reactive power datapath. Location reserved for ADE7854. > > in_reactivpower0_no_load_thresh > > > >> 0x43B3 VLEVEL register_VLEVEL R/W 24 32 ZPSE S 0x000000 Register used in the algorithm that computes the fundamental active and reactive powers (ADE7878 only). > > This one looks like a characteristic of the circuit attached. So should be devicetree > > or similar and not exposed to userspace. > > > >> 0x43B5 DICOEFF register_DICOEFF R/W 24 32 ZPSE S 0x0000000 Register used in the digital integrator algorithm. If the integrator is turned on, it must be set at 0xFF8000. In practice, it is transmitted as 0xFFF8000. > > no userspace interface. > > > >> 0x43B6 HPFDIS register_HPFDIS R/W 24 32 ZP U 0x000000 Disables/enables the HPF in the current datapath (see Table 34). > > We have controls for high pass filters, you'll need to map on to them. > > Disable is usually setting 3DB point to 0 IIRC. > > > >> 0x43B8 ISUMLVL register_ISUMLVL R/W 24 32 ZPSE S 0x000000 Threshold used in comparison between the sum of phase currents and the neutral current (ADE7868 and ADE7878 only). > > This is an event threshold so needs to map to the events infrastructure > > as best we can. It's actually a pain to describe so may be device specific ABI. > > > >> 0x43BF ISUM register_ISUM R 28 32 ZP S N/A4 Sum of IAWV, IBWV, and ICWV registers (ADE7868 and ADE7878 only). > > So this would be using a modifier for AandBandC phases (similar to the XandYanZ ones for mems devices and > > a derived value of sum I think So would look something like. > > in_current0_phaseA&phaseB&phaseC_sum and yet another channel > > > >> 0x43C0 AIRMS in_current0_phaseA_rms R 24 32 ZP S N/A4 Phase A current rms value. > >> 0x43C1 AVRMS in_voltage0_phaseA_rms R 24 32 ZP S N/A4 Phase A voltage rms value. > >> 0x43C2 BIRMS in_current0_phaseB_rms R 24 32 ZP S N/A4 Phase B current rms value. > >> 0x43C3 BVRMS in_voltage0_phaseB_rms R 24 32 ZP S N/A4 Phase B voltage rms value. > >> 0x43C4 CIRMS in_current0_phaseC_rms R 24 32 ZP S N/A4 Phase C current rms value. > >> 0x43C5 CVRMS in_voltage0_phaseC_rms R 24 32 ZP S N/A4 Phase C voltage rms value. > >> 0x43C6 NIRMS in_current0_neutral_rms R 24 32 ZP S N/A4 Neutral current rms value (ADE7868 and ADE7878 only). > >> 0xE228 Run register_Run R/W 16 16 U 0x0000 Run register starts and stops the DSP. See the Digital Signal Processor section for more details. > > Not exposed to userspace. > > > >> 0xE400 AWATTHR in_energy0_phaseA_raw R 32 32 S 0x00000000 Phase A total active energy accumulation. > >> 0xE401 BWATTHR in_energy0_phaseB_raw R 32 32 S 0x00000000 Phase B total active energy accumulation. > >> 0xE402 CWATTHR in_energy0_phaseC_raw R 32 32 S 0x00000000 Phase C total active energy accumulation. > >> 0xE403 AFWATTHR in_energy0_phaseA_fundamental_raw R 32 32 S 0x00000000 Phase A fundamental active energy accumulation (ADE7878 only). > >> 0xE404 BFWATTHR in_energy0_phaseB_fundamental_raw R 32 32 S 0x00000000 Phase B fundamental active energy accumulation (ADE7878 only). > >> 0xE405 CFWATTHR in_energy0_phaseC_fundamental_raw R 32 32 S 0x00000000 Phase C fundamental active energy accumulation (ADE7878 only). > >> 0xE406 AVARHR in_energyreactive0_phaseA_raw R 32 32 S 0x00000000 Phase A total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > >> 0xE407 BVARHR in_energyreactive0_phaseB_raw R 32 32 S 0x00000000 Phase B total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > >> 0xE408 CVARHR in_energyreactive0_phaseC_raw R 32 32 S 0x00000000 Phase C total reactive energy accumulation (ADE7858, ADE7868, and ADE7878 only). > >> 0xE409 AFVARHR in_energyreactive0_phaseA_fundamental_raw R 32 32 S 0x00000000 Phase A fundamental reactive energy accumulation (ADE7878 only). > >> 0xE40A BFVARHR in_energyreactive0_phaseB_fundamental_raw R 32 32 S 0x00000000 Phase B fundamental reactive energy accumulation (ADE7878 only). > >> 0xE40B CFVARHR in_energyreactive0_phaseC_fundamental_raw R 32 32 S 0x00000000 Phase C fundamental reactive energy accumulation (ADE7878 only). > >> 0xE40C AVAHR in_energyapparent0_phaseA_raw R 32 32 S 0x00000000 Phase A apparent energy accumulation. > >> 0xE40D BVAHR in_energyapparent0_phaseB_raw R 32 32 S 0x00000000 Phase B apparent energy accumulation. > >> 0xE40E CVAHR in_energyapparent0_phaseC_raw R 32 32 S 0x00000000 Phase C apparent energy accumulation. > >> 0xE500 IPEAK in_current0_peak R 32 32 U N/A Current peak register. See Figure 50 and Table 35 for details about its composition. > > Oh goody. I have no idea how we expose the which phase element of this > > cleanly. One option I suppose is to have in_current0_phaseA_peak etc > > and have all but the current peak return an error when read? It is a bit > > nasty but only so much we can do and keep with a consistent interface. > > > >> 0xE501 VPEAK in_voltage_peak R 32 32 U N/A Voltage peak register. See Figure 50 and Table 36 for details about its composition. > > Same as peak. > > > >> 0xE502 STATUS0 register_STATUS0 R/W 32 32 U N/A Interrupt Status Register 0. See Table 37. > >> 0xE503 STATUS1 register_STATUS1 R/W 32 32 U N/A Interrupt Status Register 1. See Table 38. > > No userspace interface except via events interface or error reports. > > > >> 0xE504 AIMAV in_currentA_mav R 20 32 ZP U N/A Phase A current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). > > Probably a longer name as mav is cryptic. > > in_current0_phaseA_meanabs_raw - it could have a scale and all sorts of fun. > > So I think this needs to be using the new derived infrastructure proposed here > > rather than being an info_mask element. > > > >> 0xE505 BIMAV in_currentB_mav R 20 32 ZP U N/A Phase B current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). > >> 0xE506 CIMAV in_currentC_mav R 20 32 ZP U N/A Phase C current mean absolute value computed during PSM0 and PSM1 modes (ADE7868 and ADE7878 only). > >> 0xE507 OILVL register_OILVL R/W 24 32 ZP U 0xFFFFFF Overcurrent threshold. > >> 0xE508 OVLVL register_OVLVL R/W 24 32 ZP U 0xFFFFFF Overvoltage threshold. > > These presumably result in interrupts? (I'm running out of time so not checking) > > In which case standard event interface should work. > > > >> 0xE509 SAGLVL register_SAGLVL R/W 24 32 ZP U 0x000000 Voltage SAG level threshold. > > That's another event I think... > > > >> 0xE50A MASK0 register_MASK0 R/W 32 32 U 0x00000000 Interrupt Enable Register 0. See Table 39. > >> 0xE50B MASK1 register_MASK1 R/W 32 32 U 0x00000000 Interrupt Enable Register 1. See Table 40. > > > >> 0xE50C IAWV in_currentA_instantaneous R 24 32 SE S N/A Instantaneous value of Phase A current. > >> 0xE50D IBWV in_currentB_instantaneous R 24 32 SE S N/A Instantaneous value of Phase B current. > >> 0xE50E ICWV in_currentC_instantaneous R 24 32 SE S N/A Instantaneous value of Phase C current. > >> 0xE50F INWV in_currentN_instantaneous R 24 32 SE S N/A Instantaneous value of neutral current (ADE7868 and ADE7878 only). > >> 0xE510 VAWV in_voltageA_instantaneous R 24 32 SE S N/A Instantaneous value of Phase A voltage. > >> 0xE511 VBWV in_voltageB_instantaneous R 24 32 SE S N/A Instantaneous value of Phase B voltage. > >> 0xE512 VCWV in_voltageC_instantaneous R 24 32 SE S N/A Instantaneous value of Phase C voltage. > > OK, this is getting silly. I presume this means the values above are filtered and these > > aren't? If so you need to have channels for both and different filter values. > > > >> 0xE513 AWATT in_powerA_instantaneous R 24 32 SE S N/A Instantaneous value of Phase A total active power. > >> 0xE514 BWATT in_powerB_instantaneous R 24 32 SE S N/A Instantaneous value of Phase B total active power. > >> 0xE515 CWATT in_powerC_instantaneous R 24 32 SE S N/A Instantaneous value of Phase C total active power. > >> 0xE516 AVAR in_powerreactiveA_instantaneous R 24 32 SE S N/A Instantaneous value of Phase A total reactive power (ADE7858, ADE7868, and ADE7878 only). > >> 0xE517 BVAR in_powerreactiveB_instantaneous R 24 32 SE S N/A Instantaneous value of Phase B total reactive power (ADE7858, ADE7868, and ADE7878 only). > >> 0xE518 CVAR in_powerreactiveC_instantaneous R 24 32 SE S N/A Instantaneous value of Phase C total reactive power (ADE7858, ADE7868, and ADE7878 only). > >> 0xE519 AVA in_powerapparentA_instantaneous R 24 32 SE S N/A Instantaneous value of Phase A apparent power. > >> 0xE51A BVA in_powerapparentB_instantaneous R 24 32 SE S N/A Instantaneous value of Phase B apparent power. > >> 0xE51B CVA in_powerappatentC_instantaneous R 24 32 SE S N/A Instantaneous value of Phase C apparent power. > > Same for all of these. > > > >> 0xE51F CHECKSUM register_CHECKSUM R 32 32 U 0x33666787 Checksum verification. See the Checksum Register section for details. > > Not exposed to userspace. > > > >> 0xE520 VNOM in_voltage_rms_nominal R/W 24 32 ZP S 0x000000 Nominal phase voltage rms used in the alternative computation of the apparent power. When the VNOMxEN bit is set, the applied voltage input in the corresponding phase is ignored and all corresponding rms voltage instances are replaced by the value in the VNOM register. > > Why would this be done? Sounds like something that is a circuit design time > > decision so a job for DT to me. > > > >> 0xE600 PHSTATUS in_current_phase_peak R 16 16 U N/A Phase peak register. See Table 41. > >> 0xE601 ANGLE0 register_ANGLE0 R 16 16 U N/A Time Delay 0. See the Time Interval Between Phases section for details. > >> 0xE602 ANGLE1 register_ANGLE1 R 16 16 U N/A Time Delay 1. See the Time Interval Between Phases section for details. > >> 0xE603 ANGLE2 register_ANGLE2 R 16 16 U N/A Time Delay 2. See the Time Interval Between Phases section for details. > > Hmm. More fun. These are derived values between to phase measurements. > > The phase as a modifier falls down a bit here - if we had just treated > > them as channels we could have done this a differential angle channel. > > Right now I'm not sure how we do this, could do it as a derived values so something like > > in_angle0_phaseA&phaseB_diff_raw etc but that feels odd. > > This one needs more thought. > > > >> 0xE604 to 0xE606 Reserved These addresses should not be written for proper operation. > >> 0xE607 PERIOD register_PERIOD R 16 16 U N/A Network line period. > > Superficially this sounds like a channel free element so shared_by_all. > > > >> 0xE608 PHNOLOAD register_PHNOLOAD R 16 16 U N/A Phase no load register. See Table 42. > > Hmm. So this is kind of a set of events with but without I think an interrupt. > > Odd. > > > >> 0xE60C LINECYC register_LINECYC R/W 16 16 U 0xFFFF Line cycle accumulation mode count. > > in_count0_raw probably though it's a bit of a stretch. > > > >> 0xE60D ZXTOUT register_ZXTOUT R/W 16 16 U 0xFFFF Zero-crossing timeout count. > > This is going to be another top level one I think and device specific for now. > > > >> 0xE60E COMPMODE register_COMPMODE R/W 16 16 U 0x01FF Computation-mode register. See Table 43. > > If there is stuff to control in here it need breaking out. > > > >> 0xE60F Gain register_Gain R/W 16 16 U 0x0000 PGA gains at ADC inputs. See Table 44. > > Oh goody another scale value. Needs breaking up into separate controls. > > Do these directly effect the measured output voltage etc? If they do then > > I'm not sure how to separate the two gains, there ought to be a 'right' > > answer. If this is about matching to the circuit present then they > > should probably be coming from DT or simillar. > > > > > >> 0xE610 CFMODE register_CFMODE R/W 16 16 U 0x0E88 CFx configuration register. See Table 45. > >> 0xE611 CF1DEN register_CF1DEN R/W 16 16 U 0x0000 CF1 denominator. > >> 0xE612 CF2DEN register_CF2DEN R/W 16 16 U 0x0000 CF2 denominator. > >> 0xE613 CF3DEN register_CF3DEN R/W 16 16 U 0x0000 CF3 denominator. > > Are these things that should be in DT? Look very quickly like they are todo with other circuits nearby. > > > >> 0xE614 APHCAL register_APHCAL R/W 10 16 ZP S 0x0000 Phase calibration of Phase A. See Table 46. > >> 0xE615 BPHCAL register_BPHCAL R/W 10 16 ZP S 0x0000 Phase calibration of Phase B. See Table 46. > >> 0xE616 CPHCAL register__CPHCAL R/W 10 16 ZP S 0x0000 Phase calibration of Phase C. See Table 46. > > I'm not actually sure how you would set these. Per circuit design? > > > >> 0xE617 PHSIGN register_PHSIGN R 16 16 U N/A Power sign register. See Table 47. > >> 0xE618 CONFIG register_CONFIG R/W 16 16 U 0x0000 ADE7878 configuration register. See Table 48. > >> 0xE700 MMODE register__MMODE R/W 8 8 U 0x1C Measurement mode register. See Table 49. > >> 0xE701 ACCMODE register__ACCMODE R/W 8 8 U 0x00 Accumulation mode register. See Table 50. > >> 0xE702 LCYCMODE register_LCYCMODE R/W 8 8 U 0x78 Line accumulation mode behavior. See Table 52. > >> 0xE703 PEAKCYC register_PEAKCYC R/W 8 8 U 0x00 Peak detection half line cycles. > >> 0xE704 SAGCYC register_SAGCYC R/W 8 8 U 0x00 SAG detection half line cycles. > > Some of these are event controls. Map them as such. > > > >> 0xE705 CFCYC register_CFCYC R/W 8 8 U 0x01 Number of CF pulses between two consecutive energy latches. See the Synchronizing Energy Registers with CFx Outputs section. > >> 0xE706 HSDC_CFG register_HSDC_CFG R/W 8 8 U 0x00 HSDC configuration register. See Table 53. > >> 0xE707 Version register_Version R 8 8 U Version of die. > >> 0xEBFF Reserved 8 8 This address can be used in manipulating the SS/HSA pin when SPI is chosen as the active port. See the Serial Interfaces section for details. > >> 0xEC00 LPOILVL register_LPOILVL R/W 8 8 U 0x07 "Overcurrent threshold used during PSM2 mode (ADE7868 and ADE7878 > >> only). See Table 54 in which the register is detailed." > >> 0xEC01 CONFIG2 register_CONFIG2 R/W 8 8 U 0x00 Configuration register used during PSM1 mode. See Table 55. > > > > As you can guess I was running out of stamina towards the end of that. > > > > I'm not totally sure of the answer I provided. It may take some more thought. > > Ideally some others will give input on this question. > > > > Jonathan > >> > >> Regards, > >> John > >> > >> > >> > >> > >> > >>> On Mar 17, 2018, at 1:30 PM, Jonathan Cameron wrote: > >>> > >>> On Wed, 14 Mar 2018 23:12:02 -0700 > >>> John Syne wrote: > >>> > >>>> Hi Jonathan, > >>>> > >>>> I have been looking at the IIO ABI docs and if I understand > >>>> correctly, the idea is to use consistent naming conventions? So for > >>>> example, looking at the ADE7854 datasheet, the naming matching the > >>>> ADE7854 registers would be as follows: > >>> > >>> Welcome to one of the big reasons no one tidied these drivers > >>> up originally. Still we have moved on somewhat since then > >>> so similar circumstances have come up in other types of sensor. > >>> > >>>> > >>>> {direction}_{type}_{index}_{modifier}_{info_mask} > >>>> > >>>> AIGAIN - In_current_a_gain > >>> Other than the fact that gain isn't an ABI element and that index > >>> doesn't have > >>> _ before it that is right. > >>> in_voltageA_scale > >>> > >>> That was a weird quirk a long time back which we should probably > >>> not have done (copied it from hwmon) > >>> > >>>> AVGAIN - in_voltage_a_gain > >>>> BIGAIN - in_current_b_gain > >>>> BVGAIN - in_voltage_b_gain > >>>> — > >>>> How do we represent the rms and offset > >>>> AIRMSOS - in_current_a_rmsoffset > >>>> AVRMSOS - in_voltage_a_rmsoffset > >>> > >>> Right now we can't unfortunately though this one is easier to fix. > >>> We already have modifiers for multi axis devices doing sum_squared > >>> so add one of those for root_mean_square - this one is well known > >>> enough that rms is fine in the string. > >>> > >>> It's a effectively a different channel be it one derived from a simple > >>> one. This is going to get tricky however as we would normally use > >>> modifier to specialise a channel type - thoughts on this below. > >>> > >>>> — > >>>> Here I don’t understand how to represent both the phase and the active/reactive/apparent power components. Do we combine the phase and quadrature part like this > >>>> AVAGAIN - in_power_a_gain /* apparent power */ > >>>> — > >>>> AWGAIN - in_power_ai_gain /* active power */ > >>> And that is the problem. How do we represent the various power types. > >>> Hmm. We could do it with modifiers but above we show that we have already used them. > >>> > >>> It would be easy enough to add yet another field to the channel spec to specify > >>> this but there is a problem - Events. The event format is already pretty full > >>> so where do we put this extra element if we need to define a channel separated > >>> only by it. > >>> > >>> One thought is we could instead define these as different top level > >>> IIO_CHAN_TYPES in a similar fashion to we do for relative humidity vs > >>> the proposed absolute humidity. > >>> > >>> in_powerreactiveA_scale > >>> in_poweractivceA_scale > >>> (or in_powerrealA_scale to match with what I got taught years ago?) > >>> > >>> I presume we keep in_powerA_scale etc for the apparent power and > >>> modify any docs to make that clear. > >>> > >>>> — > >>>> AVARGAIN - in_power_aq_gain /* reactive power */ > >>>> — > >>>> Now here it becomes more complicated. Not sure how this gets handled. > >>>> AFWATTOS - in_power_a_active/fundamental/offset > >>> Yeah, some of these are getting odd. > >>> If I read this correctly this is the active power estimate based on only > >>> the fundamental frequency - so no harmonics? > >>> > >>> Hmm. This then becomes a separate channel with additional properties > >>> specifying it is only the fundamental. This feels a bit like a filter > >>> be it an unusual one? Might just be necessary to add a _fundamental_only > >>> element on the end (would be info_mask if this is common enough to > >>> justify that rather than using the extended methods to define it.). > >>> > >>> > >>>> — > >>>> AWATTHR - in_energy_ai_accumulation > >>> Great, just when I thought we had gone far enough they define reactive > >>> energy which is presumably roughly the same as reactivepower * time? > >>> In that case we need types for that as well. > >>> in_energyreactiveA_* > >>> in_energyactiveA_* > >>> > >>>> — > >>>> AVARHR - in_energy_aq_accumulation > >>>> — > >>>> IPEAK - in_current_peak > >>> That one is easy as we have an info_mask element for peak and one > >>> for peak_scale that has always been a bit odd but was needed somewhere. > >>> > >>>> — > >>>> > >>>> I’ll leave it there, because there are some even more complicated register naming issues. > >>> Something to look forward to. Gah, I always hated power engineering > >>> though I taught it very briefly (I really pity those students :( > >>> > >>> Jonathan > >>> > >>>> > >>>> Regards, > >>>> John > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>> On Mar 10, 2018, at 7:10 AM, Jonathan Cameron wrote: > >>>>> > >>>>> On Thu, 8 Mar 2018 21:37:33 -0300 > >>>>> Rodrigo Siqueira wrote: > >>>>> > >>>>>> On 03/07, Jonathan Cameron wrote: > >>>>>>> On Tue, 6 Mar 2018 21:43:47 -0300 > >>>>>>> Rodrigo Siqueira wrote: > >>>>>>> > >>>>>>>> The macro IIO_DEV_ATTR_CH_OFF is a wrapper for IIO_DEVICE_ATTR, with a > >>>>>>>> tiny change in the name definition. This extra macro does not improve > >>>>>>>> the readability and also creates some checkpatch errors. > >>>>>>>> > >>>>>>>> This patch fixes the checkpatch.pl errors: > >>>>>>>> > >>>>>>>> staging/iio/meter/ade7753.c:391: ERROR: Use 4 digit octal (0777) not > >>>>>>>> decimal permissions > >>>>>>>> staging/iio/meter/ade7753.c:395: ERROR: Use 4 digit octal (0777) not > >>>>>>>> decimal permissions > >>>>>>>> staging/iio/meter/ade7759.c:331: ERROR: Use 4 digit octal (0777) not > >>>>>>>> decimal permissions > >>>>>>>> staging/iio/meter/ade7759.c:335: ERROR: Use 4 digit octal (0777) not > >>>>>>>> decimal permissions > >>>>>>>> > >>>>>>>> Signed-off-by: Rodrigo Siqueira > >>>>>>> > >>>>>>> Hmm. I wondered a bit about this one. It's a correct patch in of > >>>>>>> itself but the interface in question doesn't even vaguely conform > >>>>>>> to any of defined IIO ABI. Anyhow, it's still and improvement so > >>>>>>> I'll take it. > >>>>>> > >>>>>> I am not sure if I understood the comment about the ABI. The meter > >>>>>> interface is wrong because it uses things like IIO_DEVICE_ATTR? It > >>>>>> should use iio_info together with *write_raw and *read_raw. Right? Is it > >>>>>> the ABI problem that you refer? > >>>>> The ABI is about the userspace interface of IIO. It is defined > >>>>> in Documentation/ABI/testing/sysfs-bus-iio* > >>>>> So this documents the naming of sysfs attributes and (more or less) > >>>>> describes a consistent interface to userspace across lots of different > >>>>> types of devices. > >>>>> > >>>>> A lot of these older drivers in staging involve a good deal of ABI that > >>>>> was not reviewed or discussed. That is one of the biggest reasons we > >>>>> didn't take them out of staging in the first place. > >>>>> > >>>>> In order for generic userspace programs to have any idea what to do > >>>>> with these devices this all needs to be fixed. > >>>>> > >>>>> There may well be cases where we need to expand the existing ABI to > >>>>> cover new things. That's fine, but it has to be done with full > >>>>> review of the relevant documentation patches. > >>>>> > >>>>> Incidentally if you want an easy driver to work on moving out of staging > >>>>> then first thing to do is to compare what it shows to userspace with these > >>>>> docs. If it's totally different then you have a big job on your hands > >>>>> as often ABI can take a lot of discussion and a long time to establish > >>>>> a consensus. > >>>>> > >>>>> Jonathan > >>>>> > >>>>> > >>>>>> > >>>>>> Thanks :) > >>>>>> > >>>>>>> Applied to the togreg branch of iio.git and pushed out as testing > >>>>>>> for the autobuilders to play with it. > >>>>>>> > >>>>>>> I also added the removal of the header define which is no > >>>>>>> longer used. > >>>>>>> > >>>>>>> Please note, following discussions with Michael, I am going to send > >>>>>>> an email announcing an intent to drop these meter drivers next > >>>>>>> cycle unless someone can provide testing for any attempt to > >>>>>>> move them out of staging. I'm still taking patches on the basis > >>>>>>> that 'might' happen - but I wouldn't focus on these until we > >>>>>>> have some certainty on whether they will be around long term! > >>>>>>> > >>>>>>> Jonathan > >>>>>>> > >>>>>>>> --- > >>>>>>>> drivers/staging/iio/meter/ade7753.c | 18 ++++++++++-------- > >>>>>>>> drivers/staging/iio/meter/ade7759.c | 18 ++++++++++-------- > >>>>>>>> 2 files changed, 20 insertions(+), 16 deletions(-) > >>>>>>>> > >>>>>>>> diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c > >>>>>>>> index c44eb577dc35..275e8dfff836 100644 > >>>>>>>> --- a/drivers/staging/iio/meter/ade7753.c > >>>>>>>> +++ b/drivers/staging/iio/meter/ade7753.c > >>>>>>>> @@ -388,14 +388,16 @@ static IIO_DEV_ATTR_VPERIOD(0444, > >>>>>>>> ade7753_read_16bit, > >>>>>>>> NULL, > >>>>>>>> ADE7753_PERIOD); > >>>>>>>> -static IIO_DEV_ATTR_CH_OFF(1, 0644, > >>>>>>>> - ade7753_read_8bit, > >>>>>>>> - ade7753_write_8bit, > >>>>>>>> - ADE7753_CH1OS); > >>>>>>>> -static IIO_DEV_ATTR_CH_OFF(2, 0644, > >>>>>>>> - ade7753_read_8bit, > >>>>>>>> - ade7753_write_8bit, > >>>>>>>> - ADE7753_CH2OS); > >>>>>>>> + > >>>>>>>> +static IIO_DEVICE_ATTR(choff_1, 0644, > >>>>>>>> + ade7753_read_8bit, > >>>>>>>> + ade7753_write_8bit, > >>>>>>>> + ADE7753_CH1OS); > >>>>>>>> + > >>>>>>>> +static IIO_DEVICE_ATTR(choff_2, 0644, > >>>>>>>> + ade7753_read_8bit, > >>>>>>>> + ade7753_write_8bit, > >>>>>>>> + ADE7753_CH2OS); > >>>>>>>> > >>>>>>>> static int ade7753_set_irq(struct device *dev, bool enable) > >>>>>>>> { > >>>>>>>> diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c > >>>>>>>> index 1decb2b8afab..c078b770fa53 100644 > >>>>>>>> --- a/drivers/staging/iio/meter/ade7759.c > >>>>>>>> +++ b/drivers/staging/iio/meter/ade7759.c > >>>>>>>> @@ -328,14 +328,16 @@ static IIO_DEV_ATTR_ACTIVE_POWER_GAIN(0644, > >>>>>>>> ade7759_read_16bit, > >>>>>>>> ade7759_write_16bit, > >>>>>>>> ADE7759_APGAIN); > >>>>>>>> -static IIO_DEV_ATTR_CH_OFF(1, 0644, > >>>>>>>> - ade7759_read_8bit, > >>>>>>>> - ade7759_write_8bit, > >>>>>>>> - ADE7759_CH1OS); > >>>>>>>> -static IIO_DEV_ATTR_CH_OFF(2, 0644, > >>>>>>>> - ade7759_read_8bit, > >>>>>>>> - ade7759_write_8bit, > >>>>>>>> - ADE7759_CH2OS); > >>>>>>>> + > >>>>>>>> +static IIO_DEVICE_ATTR(choff_1, 0644, > >>>>>>>> + ade7759_read_8bit, > >>>>>>>> + ade7759_write_8bit, > >>>>>>>> + ADE7759_CH1OS); > >>>>>>>> + > >>>>>>>> +static IIO_DEVICE_ATTR(choff_2, 0644, > >>>>>>>> + ade7759_read_8bit, > >>>>>>>> + ade7759_write_8bit, > >>>>>>>> + ADE7759_CH2OS); > >>>>>>>> > >>>>>>>> static int ade7759_set_irq(struct device *dev, bool enable) > >>>>>>>> { > >>>>>>> > >>>>>> -- > >>>>>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in > >>>>>> the body of a message to majordomo@vger.kernel.org > >>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html > >>>>> > >>>>> _______________________________________________ > >>>>> devel mailing list > >>>>> devel@linuxdriverproject.org > >>>>> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel > >>>> > >>> > >> > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-4073467-1521904735-2-12727086297036367055 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, RCVD_IN_DNSWL_MED -2.3, SPF_PASS -0.001, LANGUAGES enca, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='140.211.166.136', Host='smtp3.osuosl.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: driverdev-devel-bounces@linuxdriverproject.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1521904732; b=A1TGtF2JCBBPYaW0IeNDdSZ8HOuD3PIbtiOZft+cCt5ixuI Tzhdi5mYwrdflLcqB/iMaxoN2TzSwTv+B0FgH1RAKj9iVN3U+1MLrjQaxlTss32R h1ASLjfm7QhDm/GdkTl6HzZIxrIO/MePp7LqBeHj1yLGIGYhDKaXkqjKKnCbfvEZ OrcW7H0marqX5LWNIA3Qj+XpZWN8gpUrS2shLODYFz5Rl77hP1Uzip3C+YqV8En7 fb3ouEMx9gVtSDf2AYcCxuZAl14o1AH8u/AawUI3o81GSRhmXxo7/tA4N+y3b9FA HlzPZmea9FEwwxJ+wOzS2U5vZ3XFkDxH0TMX5PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:subject:message-id :in-reply-to:references:mime-version:list-id:list-unsubscribe :list-archive:list-post:list-help:list-subscribe:cc:content-type :content-transfer-encoding:sender; s=arctest; t=1521904732; bh=+ JBxK0C3XfdUf7cCP2yMT55+qIckwLwAYWA1HdbsiVU=; b=r6oQ+zO1vsu1SYElP Tt+ZAOPPFpjV/TzmetKyYEJEY/dD8J+t1DBCTzMSKYuf5LgUpVxCkKszCLeO5xn+ oUsdjvEH1KWPvuoSeVhynwESTGeagsjLwUK60BgxXJ+bmOP27Qu2VOXOliYBvxH5 wFIwGm7bN+z/Y8UAnCYCWLxZB8T425BkfL7gF5qqbj4KLvwCIkkJr8Z3VlIIgcYW VOj6KxpdUHcLaSYcVUft/58Eay0iFnDQd+g06it3Keee/tTVYnUmiLsaopwCKUwn ww5/3Cavp7Uals9+65iTcir7WLSyDv+ThaeFWVZ7gURVNn4wPHux4VXVEjCQb0lM HfZzQ== ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.136 (smtp3.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=silver.osuosl.org; x-aligned-from=fail; x-ptr=fail x-ptr-helo=silver.osuosl.org x-ptr-lookup=smtp3.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128; x-vs=clean score=-100 state=0 Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.136 (smtp3.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=silver.osuosl.org; x-aligned-from=fail; x-ptr=fail x-ptr-helo=silver.osuosl.org x-ptr-lookup=smtp3.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128; x-vs=clean score=-100 state=0 X-ME-VSCategory: clean X-Remote-Delivered-To: driverdev-devel@osuosl.org DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B96DF21772 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=jic23@kernel.org Date: Sat, 24 Mar 2018 15:18:29 +0000 From: Jonathan Cameron To: John Syne Subject: Re: meter ABI: (was Re: [PATCH v2 1/3] staging:iio:meter: Replaces IIO_DEV_ATTR_CH_OFF by IIO_DEVICE_ATTR) Message-ID: <20180324151829.7d03ad15@archlinux> In-Reply-To: References: <3af0e5a795059a8418cf08ff29f05f8d5e00da9b.1520382753.git.rodrigosiqueiramelo@gmail.com> <20180307200730.08ed3c2f@archlinux> <20180309003733.aichruo53vqryafg@smtp.gmail.com> <20180310151045.4570e85d@archlinux> <79D3051B-FF2F-4DD3-AF75-F6A4BAD81838@gmail.com> <20180317203037.1093cc11@archlinux> <20180318122312.0d395367@archlinux> X-Mailer: Claws Mail 3.16.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.24 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, Lars-Peter Clausen , Rodrigo Siqueira , linux-iio@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Peter Meerwald-Stadler , Hartmut Knaack , daniel.baluta@nxp.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: T24gTW9uLCAxOSBNYXIgMjAxOCAyMzoyODo0NSAtMDcwMApKb2huIFN5bmUgPGpvaG4zOTA5QGdt YWlsLmNvbT4gd3JvdGU6Cgo+IEhpIEpvbmF0aGFuLAo+IAo+IEkgYnJva2Ugb3V0IHRoZSB7RGly ZWN0aW9ufV97VHlwZX1fe0luZGV4fV97TW9kaWZpZXJ9X3tJbmZvX01hc2t9IGludG8gc2VwYXJh dGUgY29sdW1ucyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHlvdXIgaW5zdHJ1Y3Rpb25zLiBH b29kIHdheSB0byBjaGVjayB0aGUgcmVzdWx0cy4gCj4gCj4gUHJvYmFibHkgZWFzaWVyIHRvIGNv cHkgYW5kIHBhc3RlIHRoaXMgdGFibGUgaW50byBhIHNwcmVhZHNoZWV0LiBMZXQgbWUga25vdyBp ZiB0aGVyZSBpcyBhbnl0aGluZyBJIGdvdCB3cm9uZy4gVGhhbmsgeW91IGFnYWluIGZvciBhbGwg eW91ciBoZWxwLgpZZWFoLCB3ZSBuZWVkIHRvIHNocmluayB0aGlzIGlmIHdlIGRvIGl0IGFnYWlu LgoKQ2FuIGRyb3AgYW55dGhpbmcgbm90IHJlbGF0ZWQgdG8gQUJJIChzbyBSVyBtYXNrIGFkZHJl c3MgZXRjIGFuZCBqdXN0IGhhdmUgdGhlCnJlZ2lzdGVyIG5hbWUgYW5kIHRoZSBiaXRzIGFyb3Vu ZCBBQkkuCgpOb3RlIEkgbWVudGlvbmVkIHRoZSBhbHR2b2x0YWdlIHN0dWZmIGluIHRoZSBwcmV2 aW91cyBlbWFpbCwgc28gd2UgbmVlZAp0byB0aGluayBhYm91dCB3aGV0aGVyIHRoYXQgaXMgdXNl ZnVsIHRvIGRpc3Rpbmd1aXNoIHRoZSBpbnN0YW50YW5lb3VzCm1lYXN1cmVtZW50cyBmcm9tIHRo ZSBtdWx0aSBjeWNsZSBBQyBvbmVzLgpBY3R1YWxseSBJIHRoaW5rIHdlIGFyZSBmaW5lIGhlcmUg YXMgd2UgZXhwbGljaXRseSBkZXNjcmliZSBhbGwgCmFsdCBtZWFzdXJlbWVudHMgYXMgbWF2IG9y IHJtcyB3aGljaCBnb2luZyB0byBiZSBoYW5kbGVkIGluIG91cgpuZXcgY29tcHV0ZWR2YWx1ZSBk ZXNjcmlwdGlvbi4KCgo+IAo+IEFkZHJlc3MJUmVnaXN0ZXIJSUlPIEF0dHJpYnV0ZQlEZXZpY2Ug VHJlZSBvciBDb2RlCURpcmVjdGlvbglUeXBlCUluZGV4CU1vZGlmaWVyCUluZm8gTWFzawlSL1cJ Qml0IExlbmd0aAlCaXQgTGVuZ3RoIER1cmluZyBDb21tdW5pY2F0aW9ucwlUeXBlCURlZmF1bHQg VmFsdWUJRGVzY3JpcHRpb24KPiAweDQzODAJQUlHQUlOCWluX2N1cnJlbnQwX3BoYXNlQV9zY2Fs ZQkJaW4JY3VycmVudAkwCXBoYXNlQQlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBo YXNlIEEgY3VycmVudCBnYWluIGFkanVzdC4KPiAweDQzODEJQVZHQUlOCWluX3ZvbHRhZ2UwX3Bo YXNlQV9zY2FsZQkJaW4Jdm9sdGFnZQkwCXBoYXNlQQlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4 MDAwMDAwCVBoYXNlIEEgdm9sdGFnZSBnYWluIGFkanVzdC4KPiAweDQzODIJQklHQUlOCWluX2N1 cnJlbnQwX3BoYXNlQl9zY2FsZQkJaW4JY3VycmVudAkwCXBoYXNlQglzY2FsZQlSL1cJMjQJMzIg WlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIgY3VycmVudCBnYWluIGFkanVzdC4KPiAweDQzODMJQlZH QUlOCWluX3ZvbHRhZ2UwX3BoYXNlQl9zY2FsZQkJaW4Jdm9sdGFnZQkwCXBoYXNlQglzY2FsZQlS L1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIgdm9sdGFnZSBnYWluIGFkanVzdC4KPiAw eDQzODQJQ0lHQUlOCWluX2N1cnJlbnQwX3BoYXNlQ19zY2FsZQkJaW4JY3VycmVudAkwCXBoYXNl QwlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgY3VycmVudCBnYWluIGFk anVzdC4KPiAweDQzODUJQ1ZHQUlOCWluX3ZvbHRhZ2UwX3BoYXNlQ19zY2FsZQkJaW4Jdm9sdGFn ZQkwCXBoYXNlQwlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgdm9sdGFn ZSBnYWluIGFkanVzdC4KPiAweDQzODYJTklHQUlOCWluX2N1cnJlbnQwX25ldXRyYWxfc2NhbGUJ CWluCWN1cnJlbnQJMAluZXV0cmFsCXNjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJTmV1 dHJhbCBjdXJyZW50IGdhaW4gYWRqdXN0IChBREU3ODY4IGFuZCBBREU3ODc4IG9ubHkpLgo+IDB4 NDM4NwlBSVJNU09TCWluX2N1cnJlbnQwX3BoYXNlQV9ybXNfb2Zmc2V0CQlpbgljdXJyZW50CTAJ cGhhc2VBCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEEgY3VycmVudCBy bXMgb2Zmc2V0Lgo+IDB4NDM4OAlBVlJNU09TCWluX3ZvbHRhZ2UwX3BoYXNlQV9ybXNfb2Zmc2V0 CQlpbgl2b2x0YWdlCTAJcGhhc2VBCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBo YXNlIEEgdm9sdGFnZSBybXMgb2Zmc2V0Lgo+IDB4NDM4OQlCSVJNU09TCWluX2N1cnJlbnQwX3Bo YXNlQl9ybXNfb2Zmc2V0CQlpbgljdXJyZW50CTAJcGhhc2VCCW9mZnNldAlSL1cJMjQJMzIgWlBT RQlTCTB4MDAwMDAwCVBoYXNlIEIgY3VycmVudCBybXMgb2Zmc2V0Lgo+IDB4NDM4QQlCVlJNU09T CWluX3ZvbHRhZ2UwX3BoYXNlQl9ybXNfb2Zmc2V0CQlpbgl2b2x0YWdlCTAJcGhhc2VCCW9mZnNl dAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIgdm9sdGFnZSBybXMgb2Zmc2V0Lgo+ IDB4NDM4QglDSVJNU09TCWluX2N1cnJlbnQwX3BoYXNlQ19ybXNfb2Zmc2V0CQlpbgljdXJyZW50 CTAJcGhhc2VDCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgY3VycmVu dCBybXMgb2Zmc2V0Lgo+IDB4NDM4QwlDVlJNU09TCWluX3ZvbHRhZ2UwX3BoYXNlQ19ybXNfb2Zm c2V0CQlpbgl2b2x0YWdlCTAJcGhhc2VDCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAw CVBoYXNlIEMgdm9sdGFnZSBybXMgb2Zmc2V0Lgo+IDB4NDM4RAlOSVJNU09TCWluX2N1cnJlbnQw X25ldXRyYWxfcm1zX29mZnNldAkJaW4JY3VycmVudAkwCW5ldXRyYWwJb2Zmc2V0CVIvVwkyNAkz MiBaUFNFCVMJMHgwMDAwMDAJTmV1dHJhbCBjdXJyZW50IHJtcyBvZmZzZXQgKEFERTc4NjggYW5k IEFERTc4Nzggb25seSkuCj4gMHg0MzhFCUFWQUdBSU4JaW5fcG93ZXJhcHBhcmVudDBfcGhhc2VB X3NjYWxlCQlpbglwb3dlcmFwcGFyZW50CTAJcGhhc2VBCXNjYWxlCVIvVwkyNAkzMiBaUFNFCVMJ MHgwMDAwMDAJUGhhc2UgQSBhcHBhcmVudCBwb3dlciBnYWluIGFkanVzdC4KPiAweDQzOEYJQlZB R0FJTglpbl9wb3dlcmFwcGFyZW50MF9waGFzZUJfc2NhbGUJCWluCXBvd2VyYXBwYXJlbnQJMAlw aGFzZUIJc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBCIGFwcGFyZW50IHBv d2VyIGdhaW4gYWRqdXN0Lgo+IDB4NDM5MAlDVkFHQUlOCWluX3Bvd2VyYXBwYXJlbnQwX3BoYXNl Q19zY2FsZQkJaW4JcG93ZXJhcHBhcmVudAkwCXBoYXNlQwlzY2FsZQlSL1cJMjQJMzIgWlBTRQlT CTB4MDAwMDAwCVBoYXNlIEMgYXBwYXJlbnQgcG93ZXIgZ2FpbiBhZGp1c3QuCj4gMHg0MzkxCUFX R0FJTglpbl9wb3dlcjBfcGhhc2VBX3NjYWxlCQlpbglwb3dlcgkwCXBoYXNlQQlzY2FsZQlSL1cJ MjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEEgdG90YWwgYWN0aXZlIHBvd2VyIGdhaW4gYWRq dXN0Lgo+IDB4NDM5MglBV0FUVE9TCWluX3Bvd2VyMF9waGFzZUFfb2Zmc2V0CQlpbglwb3dlcgkw CXBoYXNlQQlvZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBBIHRvdGFsIGFj dGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0Lgo+IDB4NDM5MwlCV0dBSU4JaW5fcG93ZXIwX3BoYXNl Ql9zY2FsZQkJaW4JcG93ZXIJMAlwaGFzZUIJc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAw MAlQaGFzZSBCIHRvdGFsIGFjdGl2ZSBwb3dlciBnYWluIGFkanVzdC4KPiAweDQzOTQJQldBVFRP Uwlpbl9wb3dlcjBfcGhhc2VCX29mZnNldAkJaW4JcG93ZXIJMAlwaGFzZUIJb2Zmc2V0CVIvVwky NAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQiB0b3RhbCBhY3RpdmUgcG93ZXIgb2Zmc2V0IGFk anVzdC4KPiAweDQzOTUJQ1dHQUlOCWluX3Bvd2VyMF9QaGFzZUNfc2NhbGUJCWluCXBvd2VyCTAJ cGhhc2VDCXNjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyB0b3RhbCBhY3Rp dmUgcG93ZXIgZ2FpbiBhZGp1c3QuCj4gMHg0Mzk2CUNXQVRUT1MJaW5fcG93ZXIwX3BoYXNlQ19v ZmZzZXQJCWluCXBvd2VyCTAJcGhhc2VDCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAw CVBoYXNlIEMgdG90YWwgYWN0aXZlIHBvd2VyIG9mZnNldCBhZGp1c3QuCj4gMHg0Mzk3CUFWQVJH QUlOCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNlQV9zY2FsZQkJaW4JcG93ZXJyZWFjdGl2ZQkwCXBo YXNlQQlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEEgdG90YWwgcmVhY3Rp dmUgcG93ZXIgZ2FpbiBhZGp1c3QgKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4KS4KPiAw eDQzOTgJQVZBUk9TCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNlQV9vZmZzZXQJCWluCXBvd2VycmVh Y3RpdmUJMAlwaGFzZUEJb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSB0 b3RhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0IChBREU3ODU4LCBBREU3ODY4LCBhbmQg QURFNzg3OCkuCj4gMHg0Mzk5CUJWQVJHQUlOCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNlQl9zY2Fs ZQkJaW4JcG93ZXJyZWFjdGl2ZQkwCXBoYXNlQglzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAw MDAwCVBoYXNlIEIgdG90YWwgcmVhY3RpdmUgcG93ZXIgZ2FpbiBhZGp1c3QgKEFERTc4NTgsIEFE RTc4NjgsIGFuZCBBREU3ODc4KS4KPiAweDQzOUEJQlZBUk9TCWluX3Bvd2VycmVhY3RpdmUwX3Bo YXNlQl9vZmZzZXQJCWluCXBvd2VycmVhY3RpdmUJMAlwaGFzZUIJb2Zmc2V0CVIvVwkyNAkzMiBa UFNFCVMJMHgwMDAwMDAJUGhhc2UgQiB0b3RhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0 IChBREU3ODU4LCBBREU3ODY4LCBhbmQgQURFNzg3OCkuCj4gMHg0MzlCCUNWQVJHQUlOCWluX3Bv d2VycmVhY3RpdmUwX3BoYXNlQ19zY2FsZQkJaW4JcG93ZXJyZWFjdGl2ZQkwCXBoYXNlQwlzY2Fs ZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgdG90YWwgcmVhY3RpdmUgcG93ZXIg Z2FpbiBhZGp1c3QgKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4KS4KPiAweDQzOUMJQ1ZB Uk9TCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNlQ19vZmZzZXQJCWluCXBvd2VycmVhY3RpdmUJMAlw aGFzZUMJb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyB0b3RhbCByZWFj dGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0IChBREU3ODU4LCBBREU3ODY4LCBhbmQgQURFNzg3OCku Cj4gMHg0MzlECUFGV0dBSU4JaW5fcG93ZXIwX3BoYXNlQV9mdW5kYW1lbnRhbF9zY2FsZQkJaW4J cG93ZXIJMAlwaGFzZUFfZnVuZGFtZW50YWwJc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAw MAlQaGFzZSBBIGZ1bmRhbWVudGFsIGFjdGl2ZSBwb3dlciBnYWluIGFkanVzdC4gTG9jYXRpb24g cmVzZXJ2ZWQgZm9yIEFERTc4NTQsIEFERTc4NTgsIGFuZCBBREU3ODY4LgpIbW0uIEZ1bmRhbWVu dGFsIG5lZWRzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGEgc2VwYXJhdGUgY2hhbm5lbCBpbmRl eAphbmQgZGVzY3JpcHRpb24gb2YgdGhlIGZyZXF1ZW5jeSBmaWx0ZXJzIGFwcGxpZWQuICBUaGF0 IHNob3VsZCBtYXAgaXQKYSBnZW5lcmljIHdheS4KSSBhc3N1bWUgd2Ugd2lsbCBhdCBzb21lIHBv aW50IGhhdmUgZnVuZGFtZW50YWwgUk1TPwoKPiAweDQzOUUJQUZXQVRUT1MJaW5fcG93ZXIwX3Bo YXNlQV9mdW5kYW1lbnRhbF9vZmZzZXQJCWluCXBvd2VyCTAJcGhhc2VBX2Z1bmRhbWVudGFsCW9m ZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEEgZnVuZGFtZW50YWwgYWN0aXZl IHBvd2VyIG9mZnNldCBhZGp1c3QuIExvY2F0aW9uIHJlc2VydmVkIGZvciBBREU3ODU0LCBBREU3 ODU4LCBhbmQgQURFNzg2OC4KPiAweDQzOUYJQkZXR0FJTglpbl9wb3dlcjBfcGhhc2VCX2Z1bmRh bWVudGFsX3NjYWxlCQlpbglwb3dlcgkwCXBoYXNlQl9mdW5kYW1lbnRhbAlzY2FsZQlSL1cJMjQJ MzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIgZnVuZGFtZW50YWwgYWN0aXZlIHBvd2VyIGdhaW4g YWRqdXN0IChBREU3ODc4IG9ubHkpLgo+IDB4NDNBMAlCRldBVFRPUwlpbl9wb3dlcjBfcGhhc2VC X2Z1bmRhbWVudGFsX29mZnNldAkJaW4JcG93ZXIJMAlwaGFzZUJfZnVuZGFtZW50YWwJb2Zmc2V0 CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQiBmdW5kYW1lbnRhbCBhY3RpdmUgcG93 ZXIgb2Zmc2V0IGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiAweDQzQTEJQ0ZXR0FJTglpbl9wb3dl cjBfcGhhc2VDX2Z1bmRhbWVudGFsX3NjYWxlCQlpbglwb3dlcgkwCXBoYXNlQ19mdW5kYW1lbnRh bAlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgZnVuZGFtZW50YWwgYWN0 aXZlIHBvd2VyIGdhaW4gYWRqdXN0Lgo+IDB4NDNBMglDRldBVFRPUwlpbl9wb3dlcjBfcGhhc2VD X2Z1bmRhbWVudGFsX29mZnNldAkJaW4JcG93ZXIJMAlwaGFzZUNfZnVuZGFtZW50YWwJb2Zmc2V0 CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyBmdW5kYW1lbnRhbCBhY3RpdmUgcG93 ZXIgb2Zmc2V0IGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiAweDQzQTMJQUZWQVJHQUlOCWluX3Bv d2VycmVhY3RpdmUwX3BoYXNlQV9mdW5kYW1lbnRhbF9zY2FsZQkJaW4JcG93ZXJyZWFjdGl2ZQkw CXBoYXNlQV9mdW5kYW1lbnRhbAlzY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNl IEEgZnVuZGFtZW50YWwgcmVhY3RpdmUgcG93ZXIgZ2FpbiBhZGp1c3QgKEFERTc4Nzggb25seSku Cj4gMHg0M0E0CUFGVkFST1MJaW5fcG93ZXJyZWFjdGl2ZTBfcGhhc2VBX2Z1bmRhbWVudGFsX29m ZnNldAkJaW4JcG93ZXJyZWFjdGl2ZQkwCXBoYXNlQV9mdW5kYW1lbnRhbAlvZmZzZXQJUi9XCTI0 CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBBIGZ1bmRhbWVudGFsIHJlYWN0aXZlIHBvd2VyIG9m ZnNldCBhZGp1c3QgKEFERTc4Nzggb25seSkuCj4gMHg0M0E1CUJGVkFSR0FJTglpbl9wb3dlcnJl YWN0aXZlMF9waGFzZUJfZnVuZGFtZW50YWxfc2NhbGUJCWluCXBvd2VycmVhY3RpdmUJMAlwaGFz ZUJfZnVuZGFtZW50YWwJc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBCIGZ1 bmRhbWVudGFsIHJlYWN0aXZlIHBvd2VyIGdhaW4gYWRqdXN0IChBREU3ODc4IG9ubHkpLgo+IDB4 NDNBNglCRlZBUk9TCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNlQl9mdW5kYW1lbnRhbF9vZmZzZXQJ CWluCXBvd2VycmVhY3RpdmUJMAlwaGFzZUJfZnVuZGFtZW50YWwJb2Zmc2V0CVIvVwkyNAkzMiBa UFNFCVMJMHgwMDAwMDAJUGhhc2UgQiBmdW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQg YWRqdXN0IChBREU3ODc4IG9ubHkpLgo+IDB4NDNBNwlDRlZBUkdBSU4JaW5fcG93ZXJyZWFjdGl2 ZTBfcGhhc2VDX2Z1bmRhbWVudGFsX3NjYWxlCQlpbglwb3dlcnJlYWN0aXZlCTAJcGhhc2VDX2Z1 bmRhbWVudGFsCXNjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyBmdW5kYW1l bnRhbCByZWFjdGl2ZSBwb3dlciBnYWluIGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiAweDQzQTgJ Q0ZWQVJPUwlpbl9wb3dlcnJlYWN0aXZlMF9waGFzZUNfZnVuZGFtZW50YWxfb2Zmc2V0CQlpbglw b3dlcnJlYWN0aXZlCTAJcGhhc2VDX2Z1bmRhbWVudGFsCW9mZnNldAlSL1cJMjQJMzIgWlBTRQlT CTB4MDAwMDAwCVBoYXNlIEMgZnVuZGFtZW50YWwgcmVhY3RpdmUgcG93ZXIgb2Zmc2V0IGFkanVz dCAoQURFNzg3OCBvbmx5KS4KCkZyb20gZnVydGhlciB2ZXJzaW9ucyBkcm9wIGFueXRoaW5nIHdl IGFyZW4ndCBleHBvc2luZyB0byB1c2Vyc3BhY2UuIE1ha2VzIHRoaXMgZWFzaWVyIHRvIHJlYWQu Cgo+IDB4NDNBOQlWQVRIUjEJVkFUSFIxCURUCWluCQkJCQlSL1cJMjQJMzIgWlAJVQkweDAwMDAw MAlNb3N0IHNpZ25pZmljYW50IDI0IGJpdHMgb2YgVkFUSFJbNDc6MF0gdGhyZXNob2xkIHVzZWQg aW4gcGhhc2UgYXBwYXJlbnQgcG93ZXIgZGF0YXBhdGguCj4gMHg0M0FBCVZBVEhSMAlWQVRIUjAJ RFQJaW4JCQkJCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAwCUxlc3Mgc2lnbmlmaWNhbnQgMjQgYml0 cyBvZiBWQVRIUls0NzowXSB0aHJlc2hvbGQgdXNlZCBpbiBwaGFzZSBhcHBhcmVudCBwb3dlciBk YXRhcGF0aC4KPiAweDQzQUIJV1RIUjEJV1RIUjEJRFQJaW4JCQkJCVIvVwkyNAkzMiBaUAlVCTB4 MDAwMDAwCU1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiBXVEhSWzQ3OjBdIHRocmVzaG9sZCB1 c2VkIGluIHBoYXNlIHRvdGFsL2Z1bmRhbWVudGFsIGFjdGl2ZSBwb3dlciBkYXRhcGF0aC4KPiAw eDQzQUMJV1RIUjAJV1RIUjAJRFQJaW4JCQkJCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAwCUxlc3Mg c2lnbmlmaWNhbnQgMjQgYml0cyBvZiBXVEhSWzQ3OjBdIHRocmVzaG9sZCB1c2VkIGluIHBoYXNl IHRvdGFsL2Z1bmRhbWVudGFsIGFjdGl2ZSBwb3dlciBkYXRhcGF0aC4KPiAweDQzQUQJVkFSVEhS MQlWQVJUSFIxCURUCWluCQkJCQlSL1cJMjQJMzIgWlAJVQkweDAwMDAwMAlNb3N0IHNpZ25pZmlj YW50IDI0IGJpdHMgb2YgVkFSVEhSWzQ3OjBdIHRocmVzaG9sZCB1c2VkIGluIHBoYXNlIHRvdGFs L2Z1bmRhbWVudGFsIHJlYWN0aXZlIHBvd2VyIGRhdGFwYXRoIChBREU3ODU4LCBBREU3ODY4LCBh bmQgQURFNzg3OCkuCj4gMHg0M0FFCVZBUlRIUjAJVkFSVEhSMAlEVAlpbgkJCQkJUi9XCTI0CTMy IFpQCVUJMHgwMDAwMDAJTGVzcyBzaWduaWZpY2FudCAyNCBiaXRzIG9mIFZBUlRIUls0NzowXSB0 aHJlc2hvbGQgdXNlZCBpbiBwaGFzZSB0b3RhbC9mdW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dlciBk YXRhcGF0aCAoQURFNzg1OCwgQURFNzg2OCwgYW5kIEFERTc4NzgpLgo+IDB4NDNBRglSZXNlcnZl ZAlSZXNlcnZlZAkJCQkJCQlOL0E0CU4vQTQJTi9BNAlOL0E0CTB4MDAwMDAwCVRoaXMgbWVtb3J5 IGxvY2F0aW9uIHNob3VsZCBiZSBrZXB0IGF0IDB4MDAwMDAwIGZvciBwcm9wZXIgb3BlcmF0aW9u Lgo+IDB4NDNCMAlWQU5PTE9BRAlWQU5PTE9BRAlEVAlpbgkJCQkJUi9XCTI0CTMyIFpQU0UJUwkw eDAwMDAwMDAJTm8gbG9hZCB0aHJlc2hvbGQgaW4gdGhlIGFwcGFyZW50IHBvd2VyIGRhdGFwYXRo Lgo+IDB4NDNCMQlBUE5PTE9BRAlBUE5PTE9BRAlEVAlpbgkJCQkJUi9XCTI0CTMyIFpQU0UJUwkw eDAwMDAwMDAJTm8gbG9hZCB0aHJlc2hvbGQgaW4gdGhlIHRvdGFsL2Z1bmRhbWVudGFsIGFjdGl2 ZSBwb3dlciBkYXRhcGF0aC4KPiAweDQzQjMJVkxFVkVMCVZMRVZFTAlEVAlpbgkJCQkJUi9XCTI0 CTMyIFpQU0UJUwkweDAwMDAwMAlSZWdpc3RlciB1c2VkIGluIHRoZSBhbGdvcml0aG0gdGhhdCBj b21wdXRlcyB0aGUgZnVuZGFtZW50YWwgYWN0aXZlIGFuZCByZWFjdGl2ZSBwb3dlcnMgKEFERTc4 Nzggb25seSkuCj4gMHg0M0I1CURJQ09FRkYJRElDT0VGRglEVAlpbgkJCQkJUi9XCTI0CTMyIFpQ U0UJUwkweDAwMDAwMDAJUmVnaXN0ZXIgdXNlZCBpbiB0aGUgZGlnaXRhbCBpbnRlZ3JhdG9yIGFs Z29yaXRobS4gSWYgdGhlIGludGVncmF0b3IgaXMgdHVybmVkIG9uLCBpdCBtdXN0IGJlIHNldCBh dCAweEZGODAwMC4gSW4gcHJhY3RpY2UsIGl0IGlzIHRyYW5zbWl0dGVkIGFzIDB4RkZGODAwMC4K PiAweDQzQjYJSFBGRElTCUhQRkRJUwlEVAlpbgkJCQkJUi9XCTI0CTMyIFpQCVUJMHgwMDAwMDAJ RGlzYWJsZXMvZW5hYmxlcyB0aGUgSFBGIGluIHRoZSBjdXJyZW50IGRhdGFwYXRoIChzZWUgVGFi bGUgMzQpLgo+IDB4NDNCOAlJU1VNTFZMCUlTVU1MVkwJCWluCQkJCQlSL1cJMjQJMzIgWlBTRQlT CTB4MDAwMDAwCVRocmVzaG9sZCB1c2VkIGluIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VtIG9m IHBoYXNlIGN1cnJlbnRzIGFuZCB0aGUgbmV1dHJhbCBjdXJyZW50IChBREU3ODY4IGFuZCBBREU3 ODc4IG9ubHkpLgo+IDB4NDNCRglJU1VNCWluX2N1cnJlbnQwX3BoYXNlQSZwaGFzZUImcGhhc2VD X3N1bQkJaW4JY3VycmVudAkwCXBoYXNlQSZwaGFzZUImcGhhc2VDCXN1bQlSCTI4CTMyIFpQCVMJ Ti9BNAlTdW0gb2YgSUFXViwgSUJXViwgYW5kIElDV1YgcmVnaXN0ZXJzIChBREU3ODY4IGFuZCBB REU3ODc4IG9ubHkpLgpIZWhlLCBJJ2xsIGdldCBjb21wYWludHMgYWJvdXQgZGVmaW5pbmcgdmVy eSBsb25nIEFCSSBhZ2Fpbi4gIFBhaCwgaXQgc2F5cyB3aGF0Cml0IGRvZXMgb24gdGhlIHRpbi4K Cj4gMHg0M0MwCUFJUk1TCWluX2N1cnJlbnQwX3BoYXNlQV9ybXMJCWluCWN1cnJlbnQJMAlwaGFz ZUFfcm1zCQlSCTI0CTMyIFpQCVMJTi9BNAlQaGFzZSBBIGN1cnJlbnQgcm1zIHZhbHVlLgppbl9j dXJyZW50MF9waGFzZUFfcm1zX3JhdyBhcyBvdGhlcndpc2Ugd2UgZG9uJ3Qga25vdyB3ZSBuZWVk IHRvIGFwcGx5CmluX2N1cnJlbnQwX3BoYXNlQV9ybXNfc2NhbGUgdG8gaXQgKG9yIHRoZSBzaGFy ZWQgdmFsdWUgdGhhdCBtYXBzIHRvIHRoYXQpLgoKCj4gMHg0M0MxCUFWUk1TCWluX3ZvbHRhZ2Uw X3BoYXNlQV9ybXMJCWluCXZvbHRhZ2UJMAlwaGFzZUFfcm1zCQlSCTI0CTMyIFpQCVMJTi9BNAlQ aGFzZSBBIHZvbHRhZ2Ugcm1zIHZhbHVlLgo+IDB4NDNDMglCSVJNUwlpbl9jdXJyZW50MF9waGFz ZUJfcm1zCQlpbgljdXJyZW50CTAJcGhhc2VCX3JtcwkJUgkyNAkzMiBaUAlTCU4vQTQJUGhhc2Ug QiBjdXJyZW50IHJtcyB2YWx1ZS4KPiAweDQzQzMJQlZSTVMJaW5fdm9sdGFnZTBfcGhhc2VCX3Jt cwkJaW4Jdm9sdGFnZQkwCXBoYXNlQl9ybXMJCVIJMjQJMzIgWlAJUwlOL0E0CVBoYXNlIEIgdm9s dGFnZSBybXMgdmFsdWUuCj4gMHg0M0M0CUNJUk1TCWluX2N1cnJlbnQwX3BoYXNlQ19ybXMJCWlu CWN1cnJlbnQJMAlwaGFzZUNfcm1zCQlSCTI0CTMyIFpQCVMJTi9BNAlQaGFzZSBDIGN1cnJlbnQg cm1zIHZhbHVlLgo+IDB4NDNDNQlDVlJNUwlpbl92b2x0YWdlMF9waGFzZUNfcm1zCQlpbgl2b2x0 YWdlCTAJcGhhc2VDX3JtcwkJUgkyNAkzMiBaUAlTCU4vQTQJUGhhc2UgQyB2b2x0YWdlIHJtcyB2 YWx1ZS4KPiAweDQzQzYJTklSTVMJaW5fY3VycmVudDBfbmV1dHJhbF9ybXMJCWluCWN1cnJlbnQJ MAluZXV0cmFsX3JtcwkJUgkyNAkzMiBaUAlTCU4vQTQJTmV1dHJhbCBjdXJyZW50IHJtcyB2YWx1 ZSAoQURFNzg2OCBhbmQgQURFNzg3OCBvbmx5KS4KPiAweEUyMjgJUnVuCQlDb2RlCWluCQkJCQlS L1cJMTYJMTYJVQkweDAwMDAJUnVuIHJlZ2lzdGVyIHN0YXJ0cyBhbmQgc3RvcHMgdGhlIERTUC4g U2VlIHRoZSBEaWdpdGFsIFNpZ25hbCBQcm9jZXNzb3Igc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxz Lgo+IDB4RTQwMAlBV0FUVEhSCWluX2VuZXJneTBfcGhhc2VBX3JhdwkJaW4JZW5lcmd5CTAJcGhh c2VBCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBBIHRvdGFsIGFjdGl2ZSBlbmVyZ3kg YWNjdW11bGF0aW9uLgo+IDB4RTQwMQlCV0FUVEhSCWluX2VuZXJneTBfcGhhc2VCX3JhdwkJaW4J ZW5lcmd5CTAJcGhhc2VCCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBCIHRvdGFsIGFj dGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uLgo+IDB4RTQwMglDV0FUVEhSCWluX2VuZXJneTBfcGhh c2VDX3JhdwkJaW4JZW5lcmd5CTAJcGhhc2VDCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFz ZSBDIHRvdGFsIGFjdGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uLgo+IDB4RTQwMwlBRldBVFRIUglp bl9lbmVyZ3kwX3BoYXNlQV9mdW5kYW1lbnRhbF9yYXcJCWluCWVuZXJneQkwCXBoYXNlQV9mdW5k YW1lbnRhbAlyYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQSBmdW5kYW1lbnRhbCBhY3Rp dmUgZW5lcmd5IGFjY3VtdWxhdGlvbiAoQURFNzg3OCBvbmx5KS4KPiAweEU0MDQJQkZXQVRUSFIJ aW5fZW5lcmd5MF9waGFzZUJfZnVuZGFtZW50YWxfcmF3CQlpbgllbmVyZ3kJMAlwaGFzZUJfZnVu ZGFtZW50YWwJcmF3CVIJMzIJMzIJUwkweDAwMDAwMDAwCVBoYXNlIEIgZnVuZGFtZW50YWwgYWN0 aXZlIGVuZXJneSBhY2N1bXVsYXRpb24gKEFERTc4Nzggb25seSkuCj4gMHhFNDA1CUNGV0FUVEhS CWluX2VuZXJneTBfcGhhc2VDX2Z1bmRhbWVudGFsX3JhdwkJaW4JZW5lcmd5CTAJcGhhc2VDX2Z1 bmRhbWVudGFsCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBDIGZ1bmRhbWVudGFsIGFj dGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uIChBREU3ODc4IG9ubHkpLgo+IDB4RTQwNglBVkFSSFIJ aW5fZW5lcmd5cmVhY3RpdmUwX3BoYXNlQV9yYXcJCWluCWVuZXJneXJlYWN0aXZlCTAJcGhhc2VB CXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBBIHRvdGFsIHJlYWN0aXZlIGVuZXJneSBh Y2N1bXVsYXRpb24gKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4IG9ubHkpLgo+IDB4RTQw NwlCVkFSSFIJaW5fZW5lcmd5cmVhY3RpdmUwX3BoYXNlQl9yYXcJCWluCWVuZXJneXJlYWN0aXZl CTAJcGhhc2VCCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBCIHRvdGFsIHJlYWN0aXZl IGVuZXJneSBhY2N1bXVsYXRpb24gKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4IG9ubHkp Lgo+IDB4RTQwOAlDVkFSSFIJaW5fZW5lcmd5cmVhY3RpdmUwX3BoYXNlQ19yYXcJCWluCWVuZXJn eXJlYWN0aXZlCTAJcGhhc2VDCXJhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBDIHRvdGFs IHJlYWN0aXZlIGVuZXJneSBhY2N1bXVsYXRpb24gKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3 ODc4IG9ubHkpLgo+IDB4RTQwOQlBRlZBUkhSCWluX2VuZXJneXJlYWN0aXZlMF9waGFzZUFfZnVu ZGFtZW50YWxfcmF3CQlpbgllbmVyZ3lyZWFjdGl2ZQkwCXBoYXNlQV9mdW5kYW1lbnRhbAlyYXcJ UgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQSBmdW5kYW1lbnRhbCByZWFjdGl2ZSBlbmVyZ3kg YWNjdW11bGF0aW9uIChBREU3ODc4IG9ubHkpLgo+IDB4RTQwQQlCRlZBUkhSCWluX2VuZXJneXJl YWN0aXZlMF9waGFzZUJfZnVuZGFtZW50YWxfcmF3CQlpbgllbmVyZ3lyZWFjdGl2ZQkwCXBoYXNl Ql9mdW5kYW1lbnRhbAlyYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQiBmdW5kYW1lbnRh bCByZWFjdGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uIChBREU3ODc4IG9ubHkpLgo+IDB4RTQwQglD RlZBUkhSCWluX2VuZXJneXJlYWN0aXZlMF9waGFzZUNfZnVuZGFtZW50YWxfcmF3CQlpbgllbmVy Z3lyZWFjdGl2ZQkwCXBoYXNlQ19mdW5kYW1lbnRhbAlyYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJ UGhhc2UgQyBmdW5kYW1lbnRhbCByZWFjdGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uIChBREU3ODc4 IG9ubHkpLgo+IDB4RTQwQwlBVkFIUglpbl9lbmVyZ3lhcHBhcmVudDBfcGhhc2VBX3JhdwkJaW4J ZW5lcmd5YXBwYXJlbnQJMAlwaGFzZUEJcmF3CVIJMzIJMzIJUwkweDAwMDAwMDAwCVBoYXNlIEEg YXBwYXJlbnQgZW5lcmd5IGFjY3VtdWxhdGlvbi4KPiAweEU0MEQJQlZBSFIJaW5fZW5lcmd5YXBw YXJlbnQwX3BoYXNlQl9yYXcJCWluCWVuZXJneWFwcGFyZW50CTAJcGhhc2VCCXJhdwlSCTMyCTMy CVMJMHgwMDAwMDAwMAlQaGFzZSBCIGFwcGFyZW50IGVuZXJneSBhY2N1bXVsYXRpb24uCj4gMHhF NDBFCUNWQUhSCWluX2VuZXJneWFwcGFyZW50MF9waGFzZUNfcmF3CQlpbgllbmVyZ3lhcHBhcmVu dAkwCXBoYXNlQwlyYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQyBhcHBhcmVudCBlbmVy Z3kgYWNjdW11bGF0aW9uLgo+IDB4RTUwMAlJUEVBSwlpbl9jdXJyZW50MF9wZWFrCQlpbgljdXJy ZW50CTAJCXBlYWsJUgkzMgkzMglVCU4vQQlDdXJyZW50IHBlYWsgcmVnaXN0ZXIuIFNlZSBGaWd1 cmUgNTAgYW5kIFRhYmxlIDM1IGZvciBkZXRhaWxzIGFib3V0IGl0cyBjb21wb3NpdGlvbi4KPiAw eEU1MDEJVlBFQUsJaW5fdm9sdGFnZTBfcGVhawkJaW4Jdm9sdGFnZQkwCQlwZWFrCVIJMzIJMzIJ VQlOL0EJVm9sdGFnZSBwZWFrIHJlZ2lzdGVyLiBTZWUgRmlndXJlIDUwIGFuZCBUYWJsZSAzNiBm b3IgZGV0YWlscyBhYm91dCBpdHMgY29tcG9zaXRpb24uCgo+IDB4RTUwMglTVEFUVVMwCW1hcHBl ZCB0byBldmVudHMJZXZlbnQJaW4Jc3RhdHVzCTAJCXJhdwlSL1cJMzIJMzIJVQlOL0EJSW50ZXJy dXB0IFN0YXR1cyBSZWdpc3RlciAwLiBTZWUgVGFibGUgMzcuCj4gMHhFNTAzCVNUQVRVUzEJbWFw cGVkIHRvIGV2ZW50cwlldmVudAlpbglzdGF0dXMJMQkJcmF3CVIvVwkzMgkzMglVCU4vQQlJbnRl cnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEuIFNlZSBUYWJsZSAzOC4KPiAweEU1MDQJQUlNQVYJaW5f Y3VycmVudDBfcGhhc2VBX21hdgkJaW4JY3VycmVudAkJcGhhc2VBX21hdgkJUgkyMAkzMiBaUAlV CU4vQQlQaGFzZSBBIGN1cnJlbnQgbWVhbiBhYnNvbHV0ZSB2YWx1ZSBjb21wdXRlZCBkdXJpbmcg UFNNMCBhbmQgUFNNMSBtb2RlcyAoQURFNzg2OCBhbmQgQURFNzg3OCBvbmx5KS4KaW5fY3VycmVu dDBfcGhhc2VBX21hdl9yYXcKCj4gMHhFNTA1CUJJTUFWCWluX2N1cnJlbnQwX3BoYXNlQl9tYXYJ CWluCWN1cnJlbnQJCXBoYXNlQl9tYXYJCVIJMjAJMzIgWlAJVQlOL0EJUGhhc2UgQiBjdXJyZW50 IG1lYW4gYWJzb2x1dGUgdmFsdWUgY29tcHV0ZWQgZHVyaW5nIFBTTTAgYW5kIFBTTTEgbW9kZXMg KEFERTc4NjggYW5kIEFERTc4Nzggb25seSkuCj4gMHhFNTA2CUNJTUFWCWluX2N1cnJlbnQwX3Bo YXNlQ19tYXYJCWluCWN1cnJlbnQJCXBoYXNlQ19tYXYJCVIJMjAJMzIgWlAJVQlOL0EJUGhhc2Ug QyBjdXJyZW50IG1lYW4gYWJzb2x1dGUgdmFsdWUgY29tcHV0ZWQgZHVyaW5nIFBTTTAgYW5kIFBT TTEgbW9kZXMgKEFERTc4NjggYW5kIEFERTc4Nzggb25seSkuCj4gMHhFNTA3CU9JTFZMCU9JTFZM CURUCWluCQkJCQlSL1cJMjQJMzIgWlAJVQkweEZGRkZGRglPdmVyY3VycmVudCB0aHJlc2hvbGQu Cj4gMHhFNTA4CU9WTFZMCU9WTFZMCURUCWluCQkJCQlSL1cJMjQJMzIgWlAJVQkweEZGRkZGRglP dmVydm9sdGFnZSB0aHJlc2hvbGQuCj4gMHhFNTA5CVNBR0xWTAlTQUdMVkwJRFQJaW4JCQkJCVIv VwkyNAkzMiBaUAlVCTB4MDAwMDAwCVZvbHRhZ2UgU0FHIGxldmVsIHRocmVzaG9sZC4KPiAweEU1 MEEJTUFTSzAJaW5fbWFzazBfcmF3CQlpbgltYXNrCTAJCXJhdwlSL1cJMzIJMzIJVQkweDAwMDAw MDAwCUludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMC4gU2VlIFRhYmxlIDM5Lgo+IDB4RTUwQglN QVNLMQlpbl9tYXNrMV9yYXcJCWluCW1hc2sJMQkJcmF3CVIvVwkzMgkzMglVCTB4MDAwMDAwMDAJ SW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAxLiBTZWUgVGFibGUgNDAuCj4gMHhFNTBDCUlBV1YJ aW5fY3VycmVudDBfcGhhc2VBX2luc3RhbnRhbmVvdXMJCWluCWN1cnJlbnQJCXBoYXNlQQlpbnN0 YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5zdGFudGFuZW91cyB2YWx1ZSBvZiBQaGFzZSBB IGN1cnJlbnQuCkFzIG1lbnRpb25lZCBiZWZvcmUuIFRoaXMgaXMgdGhlICdleHBlY3RhdGlvbicg Zm9yIGluX2N1cnJlbnRYClNvIGl0IGlzIHRoZSBvdGhlciBjYXNlIHdlIG5lZWQgdG8gcmVwcmVz ZW50IGJ5IGRlc2NyaWJpbmcgZmlsdGVyaW5nCm9yIHVzaW5nIHRoZSBhbHR2b2x0YWdlIGVxdWl2 YWxlbnQuCgo+IDB4RTUwRAlJQldWCWluX2N1cnJlbnQwX3BoYXNlQl9pbnN0YW50YW5lb3VzCQlp bgljdXJyZW50CQlwaGFzZUIJaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRh bmVvdXMgdmFsdWUgb2YgUGhhc2UgQiBjdXJyZW50Lgo+IDB4RTUwRQlJQ1dWCWluX2N1cnJlbnQw X3BoYXNlQ19pbnN0YW50YW5lb3VzCQlpbgljdXJyZW50CQlwaGFzZUMJaW5zdGFudGFuZW91cwlS CTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQyBjdXJyZW50Lgo+ IDB4RTUwRglJTldWCWluX2N1cnJlbnQwX3BoYXNlTl9pbnN0YW50YW5lb3VzCQlpbgljdXJyZW50 CQluZXV0cmFsCWluc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZh bHVlIG9mIG5ldXRyYWwgY3VycmVudCAoQURFNzg2OCBhbmQgQURFNzg3OCBvbmx5KS4KPiAweEU1 MTAJVkFXVglpbl92b2x0YWdlMF9waGFzZUFfaW5zdGFudGFuZW91cwkJaW4Jdm9sdGFnZQkJcGhh c2VBCWluc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVlIG9m IFBoYXNlIEEgdm9sdGFnZS4KPiAweEU1MTEJVkJXVglpbl92b2x0YWdlMF9waGFzZUJfaW5zdGFu dGFuZW91cwkJaW4Jdm9sdGFnZQkJcGhhc2VCCWluc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4v QQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBoYXNlIEIgdm9sdGFnZS4KPiAweEU1MTIJVkNXVglp bl92b2x0YWdlMF9waGFzZUNfaW5zdGFudGFuZW91cwkJaW4Jdm9sdGFnZQkJcGhhc2VDCWluc3Rh bnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBoYXNlIEMg dm9sdGFnZS4KPiAweEU1MTMJQVdBVFQJaW5fcG93ZXIwX3BoYXNlQV9pbnN0YW50YW5lb3VzCQlp bglwb3dlcgkJcGhhc2VBCWluc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5l b3VzIHZhbHVlIG9mIFBoYXNlIEEgdG90YWwgYWN0aXZlIHBvd2VyLgo+IDB4RTUxNAlCV0FUVAlp bl9wb3dlcjBfcGhhc2VCX2luc3RhbnRhbmVvdXMJCWluCXBvd2VyCQlwaGFzZUIJaW5zdGFudGFu ZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQiB0b3Rh bCBhY3RpdmUgcG93ZXIuCj4gMHhFNTE1CUNXQVRUCWluX3Bvd2VyMF9waGFzZUNfaW5zdGFudGFu ZW91cwkJaW4JcG93ZXIJCXBoYXNlQwlpbnN0YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5z dGFudGFuZW91cyB2YWx1ZSBvZiBQaGFzZSBDIHRvdGFsIGFjdGl2ZSBwb3dlci4KPiAweEU1MTYJ QVZBUglpbl9wb3dlcnJlYWN0aXZlMF9waGFzZUFfaW5zdGFudGFuZW91cwkJaW4JcG93ZXJyZWFj dGl2ZQkJcGhhc2VBCWluc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3Vz IHZhbHVlIG9mIFBoYXNlIEEgdG90YWwgcmVhY3RpdmUgcG93ZXIgKEFERTc4NTgsIEFERTc4Njgs IGFuZCBBREU3ODc4IG9ubHkpLgo+IDB4RTUxNwlCVkFSCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNl Ql9pbnN0YW50YW5lb3VzCQlpbglwb3dlcnJlYWN0aXZlCQlwaGFzZUIJaW5zdGFudGFuZW91cwlS CTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQiB0b3RhbCByZWFj dGl2ZSBwb3dlciAoQURFNzg1OCwgQURFNzg2OCwgYW5kIEFERTc4Nzggb25seSkuCj4gMHhFNTE4 CUNWQVIJaW5fcG93ZXJyZWFjdGl2ZTBfcGhhc2VDX2luc3RhbnRhbmVvdXMJCWluCXBvd2VycmVh Y3RpdmUJCXBoYXNlQwlpbnN0YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5zdGFudGFuZW91 cyB2YWx1ZSBvZiBQaGFzZSBDIHRvdGFsIHJlYWN0aXZlIHBvd2VyIChBREU3ODU4LCBBREU3ODY4 LCBhbmQgQURFNzg3OCBvbmx5KS4KPiAweEU1MTkJQVZBCWluX3Bvd2VyYXBwYXJlbnQwX3BoYXNl QV9pbnN0YW50YW5lb3VzCQlpbglwb3dlcmFwcGFyZW50CQlwaGFzZUEJaW5zdGFudGFuZW91cwlS CTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQSBhcHBhcmVudCBw b3dlci4KPiAweEU1MUEJQlZBCWluX3Bvd2VyYXBwYXJlbnQwX3BoYXNlQl9pbnN0YW50YW5lb3Vz CQlpbglwb3dlcmFwcGFyZW50CQlwaGFzZUIJaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9B CUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQiBhcHBhcmVudCBwb3dlci4KPiAweEU1MUIJ Q1ZBCWluX3Bvd2VyYXBwYXRlbnQwX3BoYXNlQ19pbnN0YW50YW5lb3VzCQlpbglwb3dlcmFwcGFy ZW50CQlwaGFzZUMJaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMg dmFsdWUgb2YgUGhhc2UgQyBhcHBhcmVudCBwb3dlci4KPiAweEU1MUYJQ0hFQ0tTVU0JcmVnaXN0 ZXJfQ0hFQ0tTVU0JQ29kZQlpbgkJCQkJUgkzMgkzMglVCTB4MzM2NjY3ODcJQ2hlY2tzdW0gdmVy aWZpY2F0aW9uLiBTZWUgdGhlIENoZWNrc3VtIFJlZ2lzdGVyIHNlY3Rpb24gZm9yIGRldGFpbHMu Cj4gMHhFNTIwCVZOT00JaW5fdm9sdGFnZTBfcGhhc2Vfcm1zX25vbWluYWwJCWluCXZvbHRhZ2UJ CXBoYXNlX3Jtcwlub21pbmFsCVIvVwkyNAkzMiBaUAlTCTB4MDAwMDAwCU5vbWluYWwgcGhhc2Ug dm9sdGFnZSBybXMgdXNlZCBpbiB0aGUgYWx0ZXJuYXRpdmUgY29tcHV0YXRpb24gb2YgdGhlIGFw cGFyZW50IHBvd2VyLiBXaGVuIHRoZSBWTk9NeEVOIGJpdCBpcyBzZXQsIHRoZSBhcHBsaWVkIHZv bHRhZ2UgaW5wdXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGhhc2UgaXMgaWdub3JlZCBhbmQgYWxs IGNvcnJlc3BvbmRpbmcgcm1zIHZvbHRhZ2UgaW5zdGFuY2VzIGFyZSByZXBsYWNlZCBieSB0aGUg dmFsdWUgaW4gdGhlIFZOT00gcmVnaXN0ZXIuClRoaXMgb25lIGlzIGFuIG9kZGl0eS4gIEknbSBu b3Qgc3VyZSB3ZSB3YW50IHRvIGV4cG9zZSBpdCB0byB1c2Vyc3BhY2UgYXQgYWxsLgoKPiAweEU2 MDAJUEhTVEFUVVMJbWFwcGVkIHRvIGV2ZW50cwlldmVudAlpbgkJCQkJUgkxNgkxNglVCU4vQQlQ aGFzZSBwZWFrIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDEuCj4gMHhFNjAxCUFOR0xFMAlBTkdMRTAJ RFQJaW4JCQkJCVIJMTYJMTYJVQlOL0EJVGltZSBEZWxheSAwLiBTZWUgdGhlIFRpbWUgSW50ZXJ2 YWwgQmV0d2VlbiBQaGFzZXMgc2VjdGlvbiBmb3IgZGV0YWlscy4KPiAweEU2MDIJQU5HTEUxCUFO R0xFMQlEVAlpbgkJCQkJUgkxNgkxNglVCU4vQQlUaW1lIERlbGF5IDEuIFNlZSB0aGUgVGltZSBJ bnRlcnZhbCBCZXR3ZWVuIFBoYXNlcyBzZWN0aW9uIGZvciBkZXRhaWxzLgo+IDB4RTYwMwlBTkdM RTIJQU5HTEUyCURUCWluCQkJCQlSCTE2CTE2CVUJTi9BCVRpbWUgRGVsYXkgMi4gU2VlIHRoZSBU aW1lIEludGVydmFsIEJldHdlZW4gUGhhc2VzIHNlY3Rpb24gZm9yIGRldGFpbHMuCj4gMHhFNjA0 IHRvIDB4RTYwNglSZXNlcnZlZAkJCQkJCQkJCQkJCQlUaGVzZSBhZGRyZXNzZXMgc2hvdWxkIG5v dCBiZSB3cml0dGVuIGZvciBwcm9wZXIgb3BlcmF0aW9uLgo+IDB4RTYwNwlQRVJJT0QJaW5fcGVy aW9kX3JhdwkJaW4JcGVyaW9kCQkJcmF3CVIJMTYJMTYJVQlOL0EJTmV0d29yayBsaW5lIHBlcmlv ZC4KPiAweEU2MDgJUEhOT0xPQUQJbWFwcGVkIHRvIGV2ZW50cwlldmVudAlpbgkJCQkJUgkxNgkx NglVCU4vQQlQaGFzZSBubyBsb2FkIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDIuCj4gMHhFNjBDCUxJ TkVDWUMJaW5fY291bnQwX2N5Y2xlCQlpbgljb3VudAkwCWN5Y2xlCXJhdwlSL1cJMTYJMTYJVQkw eEZGRkYJTGluZSBjeWNsZSBhY2N1bXVsYXRpb24gbW9kZSBjb3VudC4KPiAweEU2MEQJWlhUT1VU CVpYVE9VVAlEVAlpbgkJCQkJUi9XCTE2CTE2CVUJMHhGRkZGCVplcm8tY3Jvc3NpbmcgdGltZW91 dCBjb3VudC4KPiAweEU2MEUJQ09NUE1PREUJQ09NUE1PREUJRFQJaW4JCQkJCVIvVwkxNgkxNglV CTB4MDFGRglDb21wdXRhdGlvbi1tb2RlIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDMuCj4gMHhFNjBG CUdhaW4JR2FpbglEVAlpbgkJCQkJUi9XCTE2CTE2CVUJMHgwMDAwCVBHQSBnYWlucyBhdCBBREMg aW5wdXRzLiBTZWUgVGFibGUgNDQuCj4gMHhFNjEwCUNGTU9ERQlDRk1PREUJRFQJaW4JCQkJCVIv VwkxNgkxNglVCTB4MEU4OAlDRnggY29uZmlndXJhdGlvbiByZWdpc3Rlci4gU2VlIFRhYmxlIDQ1 Lgo+IDB4RTYxMQlDRjFERU4JQ0YxREVOCURUCWluCQkJCQlSL1cJMTYJMTYJVQkweDAwMDAJQ0Yx IGRlbm9taW5hdG9yLgo+IDB4RTYxMglDRjJERU4JQ0YyREVOCURUCWluCQkJCQlSL1cJMTYJMTYJ VQkweDAwMDAJQ0YyIGRlbm9taW5hdG9yLgo+IDB4RTYxMwlDRjNERU4JQ0YzREVOCURUCWluCQkJ CQlSL1cJMTYJMTYJVQkweDAwMDAJQ0YzIGRlbm9taW5hdG9yLgo+IDB4RTYxNAlBUEhDQUwJQVBI Q0FMCURUCWluCQkJCQlSL1cJMTAJMTYgWlAJUwkweDAwMDAJUGhhc2UgY2FsaWJyYXRpb24gb2Yg UGhhc2UgQS4gU2VlIFRhYmxlIDQ2Lgo+IDB4RTYxNQlCUEhDQUwJQlBIQ0FMCURUCWluCQkJCQlS L1cJMTAJMTYgWlAJUwkweDAwMDAJUGhhc2UgY2FsaWJyYXRpb24gb2YgUGhhc2UgQi4gU2VlIFRh YmxlIDQ2Lgo+IDB4RTYxNglDUEhDQUwJQ1BIQ0FMCURUCWluCQkJCQlSL1cJMTAJMTYgWlAJUwkw eDAwMDAJUGhhc2UgY2FsaWJyYXRpb24gb2YgUGhhc2UgQy4gU2VlIFRhYmxlIDQ2Lgo+IDB4RTYx NwlQSFNJR04JUEhTSUdOCURUCWluCQkJCQlSCTE2CTE2CVUJTi9BCVBvd2VyIHNpZ24gcmVnaXN0 ZXIuIFNlZSBUYWJsZSA0Ny4KPiAweEU2MTgJQ09ORklHCUNPTkZJRwlEVAlpbgkJCQkJUi9XCTE2 CTE2CVUJMHgwMDAwCUFERTc4NzggY29uZmlndXJhdGlvbiByZWdpc3Rlci4gU2VlIFRhYmxlIDQ4 Lgo+IDB4RTcwMAlNTU9ERQlNTU9ERQlEVAlpbgkJCQkJUi9XCTgJOAlVCTB4MUMJTWVhc3VyZW1l bnQgbW9kZSByZWdpc3Rlci4gU2VlIFRhYmxlIDQ5Lgo+IDB4RTcwMQlBQ0NNT0RFCUFDQ01PREUJ RFQJaW4JCQkJCVIvVwk4CTgJVQkweDAwCUFjY3VtdWxhdGlvbiBtb2RlIHJlZ2lzdGVyLiBTZWUg VGFibGUgNTAuCj4gMHhFNzAyCUxDWUNNT0RFCUxDWUNNT0RFCURUCWluCQkJCQlSL1cJOAk4CVUJ MHg3OAlMaW5lIGFjY3VtdWxhdGlvbiBtb2RlIGJlaGF2aW9yLiBTZWUgVGFibGUgNTIuCj4gMHhF NzAzCVBFQUtDWUMJUEVBS0NZQwlEVAlpbgkJCQkJUi9XCTgJOAlVCTB4MDAJUGVhayBkZXRlY3Rp b24gaGFsZiBsaW5lIGN5Y2xlcy4KPiAweEU3MDQJU0FHQ1lDCVNBR0NZQwlEVAlpbgkJCQkJUi9X CTgJOAlVCTB4MDAJU0FHIGRldGVjdGlvbiBoYWxmIGxpbmUgY3ljbGVzLgo+IDB4RTcwNQlDRkNZ QwlDRkNZQwlEVAlpbgkJCQkJUi9XCTgJOAlVCTB4MDEJTnVtYmVyIG9mIENGIHB1bHNlcyBiZXR3 ZWVuIHR3byBjb25zZWN1dGl2ZSBlbmVyZ3kgbGF0Y2hlcy4gU2VlIHRoZSBTeW5jaHJvbml6aW5n IEVuZXJneSBSZWdpc3RlcnMgd2l0aCBDRnggT3V0cHV0cyBzZWN0aW9uLgo+IDB4RTcwNglIU0RD X0NGRwlIU0RDX0NGRwlEVAlpbgkJCQkJUi9XCTgJOAlVCTB4MDAJSFNEQyBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLiBTZWUgVGFibGUgNTMuCj4gMHhFNzA3CVZlcnNpb24JaW5fdmVyc2lvbl9yYXcJ CWluCXZlcnNpb24JCQlyYXcJUgk4CTgJVQkJVmVyc2lvbiBvZiBkaWUuCj4gMHhFQkZGCVJlc2Vy dmVkCQlEVAlpbgkJCQkJCTgJOAkJCVRoaXMgYWRkcmVzcyBjYW4gYmUgdXNlZCBpbiBtYW5pcHVs YXRpbmcgdGhlIFNTL0hTQSBwaW4gd2hlbiBTUEkgaXMgY2hvc2VuIGFzIHRoZSBhY3RpdmUgcG9y dC4gU2VlIHRoZSBTZXJpYWwgSW50ZXJmYWNlcyBzZWN0aW9uIGZvciBkZXRhaWxzLgo+IDB4RUMw MAlMUE9JTFZMCUxQT0lMVkwJRFQJaW4JCQkJCVIvVwk4CTgJVQkweDA3CSJPdmVyY3VycmVudCB0 aHJlc2hvbGQgdXNlZCBkdXJpbmcgUFNNMiBtb2RlIChBREU3ODY4IGFuZCBBREU3ODc4IG9ubHkp LiBTZWUgVGFibGUgNTQgaW4gd2hpY2ggdGhlIHJlZ2lzdGVyIGlzIGRldGFpbGVkLuKAnQo+IDB4 RUMwMQlDT05GSUcyCUNPTkZJRzIJRFQJaW4JCQkJCVIvVwk4CTgJVQkweDAwCUNvbmZpZ3VyYXRp b24gcmVnaXN0ZXIgdXNlZCBkdXJpbmcgUFNNMSBtb2RlLiBTZWUgVGFibGUgNTUuCgpTbyBvdGhl ciB0aGFuIGZ1bmRhbWVudGFsLCBpbnN0YW50YW5lb3VzIGFuZCB0aGUgZGlzdGluY3Rpb24gYmV0 d2Vlbgp3aGF0IHdvdWxkIGJlIGNvbnNpZGVyZWQgREMgbWVhc3VyZW1lbnRzIGFuZCBBQyBvbmVz IChvdmVyIHNldmVyYWwgY3ljbGVzKQp0aGF0IGFsbCBsb29rcyBnb29kIHRvIG1lIDspCgpTbyBp biBicmllZiwgSSBkb24ndCB0aGluayB3ZSBuZWVkIGluc3RhbnRhbmVvdXMgYXQgYWxsLgoKRnVu ZGFtZW50YWwgc2hvdWxkIGJlIGRvbmUgYXMgYSBwYXJhbGxlbCBjaGFubmVsIChkaWZmZXJlbnQg aW5kZXgpCndpdGggdGhlIGZpbHRlcnMgZGVzY3JpYmVkIHRvIG1ha2UgaXQgZnVuZGFtZW50YWwg b25seS4KClNvIG5leHQgc3RlcCBtYXkgYmUgcHJvcG9zaW5nIHRoZSBjb3JlIGNoYW5nZXMgdG8g YWRkIHRoZQpoYW5kbGluZyBmb3IgY29tcHV0ZWQgdmFsdWVzIGFuZCBjaGFuZ2UgdGhlIGV2ZW50 cyBkZXNjcmlwdGlvbgp0byBhbGxvdyBmb3IgZXZlbnRzIGJhc2VkIG9uIHRoZW0uICBXZSBkbyB0 aGF0IHdpdGggc29tZQpleGFtcGxlcyBhZGRlZCB0byB0aGUgZHVtbXkgZHJpdmVyIChzbyBhbnlv bmUgY2FuIHBsYXkgd2l0aCBpdAp3aXRob3V0IGhhcmR3YXJlKS4gIEFmdGVyIHRoYXQgd2UgY2Fu IHN0YXJ0IG1vdmluZyB0aGUKZHJpdmVyIG92ZXIgYnkgYWRkaW5nIHRoZSBiYXNpYyBjaGFubmVs cyBhbmQgdGhlbiBidWlsZGluZwp1cCB0byBzdXBwb3J0IGFsbCB0aGUgb2RkaXRpZXMgKGRyb3Bw aW5nIHRoZSBjdXN0b20KYXR0cmlidXRlcyBhcyB3ZSBnbykuCgpJdCdzIGEgYmlnIGpvYiBzbyBm aW5nZXJzIGNyb3NzZWQuCgpUaGFua3MsCgpKb25hdGhhbgoKCj4gCj4gUmVnYXJkcywKPiBKb2hu Cj4gCj4gCj4gCj4gCj4gCj4gPiBPbiBNYXIgMTgsIDIwMTgsIGF0IDU6MjMgQU0sIEpvbmF0aGFu IENhbWVyb24gPGppYzIzQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gCj4gPiBPbiBTYXQsIDE3IE1h ciAyMDE4IDIzOjExOjQ1IC0wNzAwCj4gPiBKb2huIFN5bmUgPGpvaG4zOTA5QGdtYWlsLmNvbT4g d3JvdGU6Cj4gPiAgIAo+ID4+IEhpIEpvbmF0aGFuLCAgCj4gPiBIaSBKb2huIGFuZCBBbGwsCj4g PiAKPiA+IEknZCBsb3ZlIHRvIGdldCBzb21lIGFkZGl0aW9uYWwgaW5wdXQgb24gdGhpcyBmcm9t IGFueW9uZSBpbnRlcmVzdGVkLgo+ID4gVGhlcmUgYXJlIGEgbG90IG9mIHdlaXJkIGFuZCB3b25k ZXJmdWwgZGVyaXZlZCBxdWFudGl0aWVzIGluIGFuIGVuZXJneQo+ID4gbWV0ZXIgYW5kIGl0IHNl ZW1zIHdlIG5lZWQgdG8gbWFrZSBzb21lIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gc3VwcG9ydAo+ ID4gdGhlbSAtIGluY2x1ZGluZyBwb3RlbnRpYWxseSBhIHVzZXJzcGFjZSBicmVha2luZyBjaGFu Z2UgdG8gdGhlIGV2ZW50Cj4gPiBjb2RlIGRlc2NyaXB0aW9uLgo+ID4gICAKPiA+PiAKPiA+PiBI ZXJlIGlzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHJlZ2lzdGVycyBmb3IgdGhlIEFERTc4Nzggd2hp Y2ggSSBjb3BpZWQgZnJvbSB0aGUgZGF0YSBzaGVldC4gSSBhZGRlZCBhIGNvbHVtbiDigJxJSU8g QXR0cmlidXRl4oCdIHdoaWNoIEkgaG9wZSBmb2xsb3dzIHlvdXIgSUlPIEFCSS4gUGxlYXNlIG1h a2UgYW55IGNoYW5nZXMgeW91IGZlZWwgYXJlIGluY29ycmVjdC4gQlRXLCB0aGVyZSBhcmUgc2V2 ZXJhbCByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgZ2VuZXJhbGl6ZWQgYW5kIGFyZSB1c2VkIHB1 cmVseSBmb3IgY2hpcCBjb25maWd1cmF0aW9uLiBJIHRoaW5rIHdlIHNob3VsZCBhZGQgYSBuZXcg bmFtaW5nIGNvbnZlbnRpb24sIG5hbWVseSB7cmVnaXN0ZXJ9X3s8Y2hpcC1yZWdpc3Rlci1uYW1l Pn0uIEFsc28sIEkgc2VlIGluIHRoZSBzeXNfYnVzX2lpbyBkb2MKPiA+PiBpbl9hY2NlbF94X3Bl YWtfcmF3Cj4gPj4gCj4gPj4gc28gc2hvdWxkbuKAmXQgdGhlIHBoYXNlIGJlIHJlcHJlc2VudGVk IGFzIGZvbGxvd3M6Cj4gPj4gCj4gPj4gaW5fY3VycmVudF9BX3NjYWxlICAKPiA+IEknbSBzdGls bCBjb25mdXNlZC4gIFdoYXQgZG9lcyBBIHJlcHJlc2VudCBoZXJlPyAgSSBhc3N1bWVkIHRoYXQg d2FzIGEgd2lsZAo+ID4gY2FyZCBmb3IgdGhlIGNoYW5uZWwgbnVtYmVyIGJlZm9yZSBidXQgY2xl YXJseSBub3QuCj4gPiAKPiA+IEFoLCB5b3UgYXJlIGxhYmVsbGluZyB0aGUgMyBzZXBhcmF0ZSBw aGFzZXMgYXMgQSwgQiBhbmQgQy4gSG1tLgo+ID4gSSBndWVzcyB0aGV5IHNvcnQgb2YgbG9vayBs aWtlIGF4aXMsIGFuZCBzb3J0IG9mIGxpa2UgaW5kZXBlbmRlbnQgY2hhbm5lbHMuCj4gPiBTbyBj b3VsZCBiZSBpbmRleGVkIG9yIGRvbmUgdmlhIG1vZGlmaWVycyBkZXBlbmRpbmcgb24gaG93IHlv dSBsb29rIGF0IGl0Lgo+ID4gCj4gPiBIbW0uIFdpdGggbmV1dHJhbCBpbiB0aGVyZSBhcyB3ZWxs IEkgZ3Vlc3Mgd2UgbmVlZCB0byBtYWtlIHRoZW0KPiA+IG1vZGlmaWVycyAoYnV0IG1pZ2h0IGNo YW5nZSBteSBtaW5kIGxhdGVyIDspCj4gPiAKPiA+IFBhcnRpY3VsYXJseSBhcyB3ZSBhcmUgdXNp bmcgdGhlIHRoZSBtb2RpZmllciBmb3IgUk1TIHVuZGVyIHRoZSBwcmV2aW91cwo+ID4gcGxhbi4u LiBJdCBhcHBlYXJzIHdlIHNob3VsZCB0cmVhdCB0aGF0IGluc3RlYWQgbGlrZSB3ZSBkaWQgZm9y IHBlYWsKPiA+IGFuZCBkbyBpdCBhcyBhbiBhZGRpdGlvbmFsIGluZm8gbWFzayBlbGVtZW50LiAg VGhlIHByb2JsZW0gd2l0aCBkb2luZyB0aGF0Cj4gPiBvbiBhIGNvbnRpbnVvdXMgbWVhc3VyZW1l bnQgaXMgdGhhdCB3ZSBjYW4ndCB0cmVhdCBpdCBhcyBhIGNoYW5uZWwgdG8KPiA+IGJlIG91dHB1 dCB0aHJvdWdoIHRoZSBidWZmZXJlZCBpbnRlcmZhY2UuCj4gPiAKPiA+IFNvIGFnYWluIHdlIGhh dmUgcnVuIG91dCBvZiBzcGFjZS4gSXQncyBpbmNyZWFzaW5nbHkgbG9va2luZyBsaWtlIHdlIG5l ZWQKPiA+IHJvb20gZm9yIGFub3RoZXIgZmllbGQgaW4gdGhlIGV2ZW50cyAtIHRvIGNsZWFubHkg cmVwcmVzZW50IGNvbXB1dGVkIHZhbHVlcy4KPiA+IAo+ID4gSG1tLiBXaGF0IGlzIHRoZSBjdXJy ZW50IHVzYWdlPyAtIGl0J3MgYmVlbiBhIHdoaWxlIHNvIEkgaGFkIHRvIGdvCj4gPiBsb29rIGlu IHRoZSBoZWFkZXIuCj4gPiAKPiA+IDAtMTUgQ2hhbm5lbCAobG90cyBvZiBjaGFubmVscykKPiA+ IDMxLTE2IENoYW5uZWwgMiAgKDM2IG1vZGlmaWVycyAtIGxvdHMgb2YgY2hhbm5lbHMpCj4gPiA0 Ny0zMiBDaGFubmVsIFR5cGUgKDMxIHVzZWQgc28gZmFyIC0gdGhpcyBsb29rcyBtb3N0IGxpa2Vs eSB0byBydW4gb3V0IG9mCj4gPiBzcGFjZSBpbiB0aGUgbG9uZyBydW4gc28gbGVhdmUgdGhpcyBv bmUgYWxvbmUpLgo+ID4gNTQtNDggRXZlbnQgRGlyZWN0aW9uICg0IHVzZWQpCj4gPiA1NSBEaWZm ZXJlbnRpYWwgICgxOiBjaGFubmVsIDIgYXMgZGlmZmVyZW50aWFsIHBhaXIgMDogYXMgYSBtb2Rp ZmllcikKPiA+IDYzLTU2IEV2ZW50IFR5cGUgKDYgdXNlZCkKPiA+IAo+ID4gU28gSSB0aGluayB3 ZSBjYW4gcGluY2ggYml0IDUzIGFzIGFub3RoZXIgZmxhZyB0byBpbmRpY2F0ZSB3ZSBoYXZlCj4g PiBhIGNvbXB1dGVkIHZhbHVlIG9yIHBvc3NpYmx5IGJpdCA2MyBhcyBldmVudCB0eXBlcyBhcmUg ZmV3IGFuZAo+ID4gZmFyIGJldHdlZW4gYXMgd2VsbC4KPiA+IAo+ID4gUHJvYmFibHkgcmVhc29u YWJsZSB0byBhc3N1bWUgd2UgbmV2ZXIgaGF2ZSAxNiBiaXRzIHdvcnRoCj4gPiBvZiBjaGFubmVs cyBhbmQgY29tcHV0ZWQgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZT8KPiA+IEhlbmNlIEkgdGhp bmsgd2UgY2FuIHN0ZWFsIGJpdHMgb2ZmIHRoZSB0b3Agb2YgQ2hhbm5lbC4KPiA+IEhvdyBtYW55 IGRvIHdlIG5lZWQ/ICBOb3Qgc3VyZSB1bmZvcnR1bmF0ZWx5IGJ1dCBmZWVscyBsaWtlCj4gPiA4 IHNob3VsZCBiZSBwbGVudHkuCj4gPiAKPiA+IFRoZSBvdGhlciBlbGVtZW50IG9mIHRoaXMgaXMg d2UgYWRkIGEgbmV3IGZpZWxkIHRvIGlpb19jaGFuX3NwZWMKPiA+IHRvIGNvbnRhaW4gJ2Rlcml2 ZWRfdHlwZScgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB3aGljaCBoYXMKPiA+IHJtcyBhbmQgc3Vt IHNxdWFyZWQgZXRjLiBPdmVyIHRpbWUgd2UgY2FuIG1vdmUgc29tZSBvZiB0aG9zZQo+ID4gZnJv bSB0aGUgbW9kaWZpZXJzIGFuZCBmcmVlIHVwIGEgZmV3IGVudGlyZXMgdGhlcmUuCj4gPiBTbyBt b2RpZmllciBtaWdodCBiZSAiWCBhbmQgWSBhbmQgWiIgd2l0aCBhIGRlcml2ZWRfdHlwZSBvZiAK PiA+IHN1bV9zcXVhcmVkIHRvIGdpdmUgZXhpc3Rpbmcgc3VtX3NxdWFyZWRfeF95X3ogYnV0IG5v Cj4gPiBydXNoIG9uIHRoYXQuCj4gPiAKPiA+IEFueWhvdyBzbyBub3cgd2UgaGF2ZSBhbiBleHRy YSBlbGVtZW50IHRvIHBsYXkgdGhhdCB3aWxsIHJlc3VsdAo+ID4gaW4gYSBkaWZmZXJlbnQgY2hh bm5lbC4KPiA+IAo+ID4gV2hpbHN0IGhlcmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGFueSBvdGhl ciBtb2RzIG5lZWRlZCB0bwo+ID4gdGhhdCBldmVudCBzdHJ1Y3R1cmUuICBJdCBpcyBhIGxpdHRs ZSB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMKPiA+IHdpbGwgYmUgYSBicmVha2luZyBjaGFuZ2UgZm9y IGFueSBvbGQgdXNlcnNwYWNlIGNvZGUgcGxheWluZwo+ID4gd2l0aCBuZXcgZHJpdmVycyBidXQg aXQgY2FuJ3QgYmUgaGVscGVkIGFzIHdlIGRpZG4ndCBoYXZlCj4gPiByZXNlcnZlZCB2YWx1ZXMg aW4gdGhlIG9yaWdpbmFsIGRlZmluaXRpb24gKG9vcHMpLgo+ID4gCj4gPiBBdCBzb21lcG9pbnQg d2UgbWF5IG5lZWQgdG8gYWRkIHRoZSAnc2hhcmVkIGJ5IGRlcml2ZWRfdmFsdWUnCj4gPiBpbmZv IG1hc2sgYnV0IEkgdGhpbmsgd2UgY2FuIGlnbm9yZSB0aGF0IGZvciBub3cgKHNlZW1zCj4gPiBt b2RlcmF0ZWx5IHVubGlrZWx5IHRvIGhhdmUgYW55dGhpbmcgaW4gaXQhKSAgCj4gPj4gCj4gPj4g QnV0IGZvciBub3csIEkgZm9sbG93ZWQgeW91ciBpbnN0cnVjdGlvbnMgZnJvbSB5b3VyIHJlcGx5 Lgo+ID4+IAo+ID4+IEFmdGVyIGZpbmFsaXppbmcgdGhpcyBvbmUsIEkgd2lsbCB3b3JrIG9uIHRo ZSBBREU5MDAwLCB3aGljaCBhcyB3YXkgbW9yZSByZWdpc3RlcnMgOy0pCj4gPj4gCj4gPj4gT25j ZSB3ZSBjYW4gYWdyZWUgb24gdGhlIHJlZ2lzdGVyIG5hbWluZywgSSB3aWxsIHVwZGF0ZSB0aGUg QURFNzg1NCBkcml2ZXIgZm9yIFJvZHJpZ28sIHdoaWNoIHdpbGwgZ28gYSBsb25nIHdheSB0byBn ZXR0aW5nIGl0IG91dCBvZiBzdGFnaW5nLiAgCj4gPiBJJ2xsIGVkaXQgdG8gZml0IHdpdGggbmV3 IHNjaGVtZSBhbmQgaW5zZXJ0IGluZGV4ZXMgd2hpY2ggSSB0aGluayB3b3VsZCBiZQo+ID4gcHJl ZmVycmVkIHRob3VnaCBvcHRpb25hbCB1bmRlciB0aGUgQUJJIGFzIHdlIG9ubHkgaGF2ZSBvbmUg b2YgZWFjaCB0eXBlLyAgCj4gPj4gCj4gPj4gQWRkcmVzcwlSZWdpc3RlcglJSU8gQXR0cmlidXRl CVIvVwlCaXQgTGVuZ3RoCUJpdCBMZW5ndGggRHVyaW5nIENvbW11bmljYXRpb25zCVR5cGUJRGVm YXVsdCBWYWx1ZQlEZXNjcmlwdGlvbgo+ID4+IDB4NDM4MAlBSUdBSU4JaW5fY3VycmVudDBfcGhh c2VBX3NjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSBjdXJyZW50IGdhaW4g YWRqdXN0LiAgCj4gPiBBLCBCLCBDLCBOIGFyZW4ndCBvYnZpb3VzIHRvIHRoZSBsYXkgcmVhZGVy IHNvIEkgc3VnZ2VzdCB3ZSBidXJuIGEgZmV3IGNoYXJhY3RlcnMgYW5kIHN0aWNrIHBoYXNlIGlu IGZvciBBQkMgYW5kIGp1c3QgaGF2ZSBuZXV0cmFsIGZvcgo+ID4gdGhlIG5ldXRyYWwgb25lLiBO b3Qgc3VyZSBhYm91dCBjYXBpdGFsaXphdGlvbiBvciBub3QgdGhvdWdoLgo+ID4gICAKPiA+PiAw eDQzODEJQVZHQUlOCWluX3ZvbHRhZ2UwX3BoYXNlQV9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4 MDAwMDAwCVBoYXNlIEEgdm9sdGFnZSBnYWluIGFkanVzdC4KPiA+PiAweDQzODIJQklHQUlOCWlu X2N1cnJlbnQwX3BoYXNlQl9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIg Y3VycmVudCBnYWluIGFkanVzdC4KPiA+PiAweDQzODMJQlZHQUlOCWluX3ZvbHRhZ2UwX3BoYXNl Ql9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEIgdm9sdGFnZSBnYWluIGFk anVzdC4KPiA+PiAweDQzODQJQ0lHQUlOCWluX2N1cnJlbnQwX3BoYXNlQ19zY2FsZQlSL1cJMjQJ MzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgY3VycmVudCBnYWluIGFkanVzdC4KPiA+PiAweDQz ODUJQ1ZHQUlOCWluX3ZvbHRhZ2UwX3BoYXNlQ19zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAw MDAwCVBoYXNlIEMgdm9sdGFnZSBnYWluIGFkanVzdC4KPiA+PiAweDQzODYJTklHQUlOCWluX2N1 cnJlbnQwX25ldXRyYWxfc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlOZXV0cmFsIGN1 cnJlbnQgZ2FpbiBhZGp1c3QgKEFERTc4NjggYW5kIEFERTc4Nzggb25seSkuCj4gPj4gMHg0Mzg3 CUFJUk1TT1MJaW5fY3VycmVudDBfcGhhc2VBX3Jtc19vZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkw eDAwMDAwMAlQaGFzZSBBIGN1cnJlbnQgcm1zIG9mZnNldC4KPiA+PiAweDQzODgJQVZSTVNPUwlp bl92b2x0YWdlMF9waGFzZUFfcm1zX29mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBo YXNlIEEgdm9sdGFnZSBybXMgb2Zmc2V0Lgo+ID4+IDB4NDM4OQlCSVJNU09TCWluX2N1cnJlbnQw X3BoYXNlQl9ybXNfb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQiBjdXJy ZW50IHJtcyBvZmZzZXQuCj4gPj4gMHg0MzhBCUJWUk1TT1MJaW5fdm9sdGFnZTBfcGhhc2VCX3Jt c19vZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBCIHZvbHRhZ2Ugcm1zIG9m ZnNldC4KPiA+PiAweDQzOEIJQ0lSTVNPUwlpbl9jdXJyZW50MF9waGFzZUNfcm1zX29mZnNldAlS L1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgY3VycmVudCBybXMgb2Zmc2V0Lgo+ID4+ IDB4NDM4QwlDVlJNU09TCWluX3ZvbHRhZ2UwX3BoYXNlQ19ybXNfb2Zmc2V0CVIvVwkyNAkzMiBa UFNFCVMJMHgwMDAwMDAJUGhhc2UgQyB2b2x0YWdlIHJtcyBvZmZzZXQuCj4gPj4gMHg0MzhECU5J Uk1TT1MJaW5fY3VycmVudDBfbmV1dHJhbF9ybXNfb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgw MDAwMDAJTmV1dHJhbCBjdXJyZW50IHJtcyBvZmZzZXQgKEFERTc4NjggYW5kIEFERTc4Nzggb25s eSkuCj4gPj4gMHg0MzhFCUFWQUdBSU4JaW5fcG93ZXJhcHBhcmVudDBfcGhhc2VBX3NjYWxlCVIv VwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSBhcHBhcmVudCBwb3dlciBnYWluIGFkanVz dC4KPiA+PiAweDQzOEYJQlZBR0FJTglpbl9wb3dlcmFwcGFyZW50MF9waGFzZUJfc2NhbGUJUi9X CTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBCIGFwcGFyZW50IHBvd2VyIGdhaW4gYWRqdXN0 Lgo+ID4+IDB4NDM5MAlDVkFHQUlOCWluX3Bvd2VyYXBwYXJlbnQwX3BoYXNlQ19zY2FsZQlSL1cJ MjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMgYXBwYXJlbnQgcG93ZXIgZ2FpbiBhZGp1c3Qu Cj4gPj4gMHg0MzkxCUFXR0FJTglpbl9wb3dlcjBfcGhhc2VBX3NjYWxlCVIvVwkyNAkzMiBaUFNF CVMJMHgwMDAwMDAJUGhhc2UgQSB0b3RhbCBhY3RpdmUgcG93ZXIgZ2FpbiBhZGp1c3QuCj4gPj4g MHg0MzkyCUFXQVRUT1MJaW5fcG93ZXIwX3BoYXNlQV9vZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkw eDAwMDAwMAlQaGFzZSBBIHRvdGFsIGFjdGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0Lgo+ID4+IDB4 NDM5MwlCV0dBSU4JaW5fcG93ZXIwX3BoYXNlQl9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAw MDAwCVBoYXNlIEIgdG90YWwgYWN0aXZlIHBvd2VyIGdhaW4gYWRqdXN0Lgo+ID4+IDB4NDM5NAlC V0FUVE9TCWluX3Bvd2VyMF9waGFzZUJfb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJ UGhhc2UgQiB0b3RhbCBhY3RpdmUgcG93ZXIgb2Zmc2V0IGFkanVzdC4KPiA+PiAweDQzOTUJQ1dH QUlOCWluX3Bvd2VyMF9QaGFzZUNfc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFz ZSBDIHRvdGFsIGFjdGl2ZSBwb3dlciBnYWluIGFkanVzdC4KPiA+PiAweDQzOTYJQ1dBVFRPUwlp bl9wb3dlcjBfcGhhc2VDX29mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBoYXNlIEMg dG90YWwgYWN0aXZlIHBvd2VyIG9mZnNldCBhZGp1c3QuCj4gPj4gMHg0Mzk3CUFWQVJHQUlOCWlu X3Bvd2VycmVhY3RpdmUwX3BoYXNlQV9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBo YXNlIEEgdG90YWwgcmVhY3RpdmUgcG93ZXIgZ2FpbiBhZGp1c3QgKEFERTc4NTgsIEFERTc4Njgs IGFuZCBBREU3ODc4KS4KPiA+PiAweDQzOTgJQVZBUk9TCWluX3Bvd2VycmVhY3RpdmUwX3BoYXNl QV9vZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBBIHRvdGFsIHJlYWN0aXZl IHBvd2VyIG9mZnNldCBhZGp1c3QgKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4KS4KPiA+ PiAweDQzOTkJQlZBUkdBSU4JaW5fcG93ZXJyZWFjdGl2ZTBfcGhhc2VCX3NjYWxlCVIvVwkyNAkz MiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQiB0b3RhbCByZWFjdGl2ZSBwb3dlciBnYWluIGFkanVz dCAoQURFNzg1OCwgQURFNzg2OCwgYW5kIEFERTc4NzgpLgo+ID4+IDB4NDM5QQlCVkFST1MJaW5f cG93ZXJyZWFjdGl2ZTBfcGhhc2VCX29mZnNldAlSL1cJMjQJMzIgWlBTRQlTCTB4MDAwMDAwCVBo YXNlIEIgdG90YWwgcmVhY3RpdmUgcG93ZXIgb2Zmc2V0IGFkanVzdCAoQURFNzg1OCwgQURFNzg2 OCwgYW5kIEFERTc4NzgpLgo+ID4+IDB4NDM5QglDVkFSR0FJTglpbl9wb3dlcnJlYWN0aXZlMF9w aGFzZUNfc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBDIHRvdGFsIHJlYWN0 aXZlIHBvd2VyIGdhaW4gYWRqdXN0IChBREU3ODU4LCBBREU3ODY4LCBhbmQgQURFNzg3OCkuCj4g Pj4gMHg0MzlDCUNWQVJPUwlpbl9wb3dlcnJlYWN0aXZlMF9waGFzZUNfb2Zmc2V0CVIvVwkyNAkz MiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyB0b3RhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQgYWRq dXN0IChBREU3ODU4LCBBREU3ODY4LCBhbmQgQURFNzg3OCkuCj4gPj4gMHg0MzlECUFGV0dBSU4J aW5fcG93ZXIwX3BoYXNlQV9mdW5kYW1lbnRhbF9zY2FsZQlSL1cJMjQJMzIgWlBTRQlTCTB4MDAw MDAwCVBoYXNlIEEgZnVuZGFtZW50YWwgYWN0aXZlIHBvd2VyIGdhaW4gYWRqdXN0LiBMb2NhdGlv biByZXNlcnZlZCBmb3IgQURFNzg1NCwgQURFNzg1OCwgYW5kIEFERTc4NjguICAKPiA+IEhtbS4g ZnVuZGFtZW50YWwgaXMgdGhlIG9kZGl0eSBoZXJlLiAgSSBoZXJlIGJlY2F1c2UgIGl0IGlzIHNv cnQgb2YgYSBkZXJpdmVkIHZhbHVlCj4gPiBhbmQgc29ydCBvZiBhIGZpbHRlciBhcHBsaWVkLiAg Q2FuIGl0IGJlIHNlbnNpYmxlIGNvbWJpbmVkIHdpdGggUk1TPyBwcm9iYWJseSBub3QgYnV0Cj4g PiBpdCBjYW4gYmUgY29tYmluZWQgd2l0aCBwZWFrIGZvciBleGFtcGxlICh3aGljaCBJJ2QgYWxz byBpZGVhbGx5IG1vdmUgaW50bwo+ID4gdGhlIGRlcml2ZWQgcmVwcmVzZW50YXRpb24uKS4KPiA+ ICAgCj4gPj4gMHg0MzlFCUFGV0FUVE9TCWluX3Bvd2VyMF9waGFzZUFfZnVuZGFtZW50YWxfb2Zm c2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSBmdW5kYW1lbnRhbCBhY3RpdmUg cG93ZXIgb2Zmc2V0IGFkanVzdC4gTG9jYXRpb24gcmVzZXJ2ZWQgZm9yIEFERTc4NTQsIEFERTc4 NTgsIGFuZCBBREU3ODY4Lgo+ID4+IDB4NDM5RglCRldHQUlOCWluX3Bvd2VyMF9waGFzZUJfZnVu ZGFtZW50YWxfc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBCIGZ1bmRhbWVu dGFsIGFjdGl2ZSBwb3dlciBnYWluIGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiA+PiAweDQzQTAJ QkZXQVRUT1MJaW5fcG93ZXIwX3BoYXNlQl9mdW5kYW1lbnRhbF9vZmZzZXQJUi9XCTI0CTMyIFpQ U0UJUwkweDAwMDAwMAlQaGFzZSBCIGZ1bmRhbWVudGFsIGFjdGl2ZSBwb3dlciBvZmZzZXQgYWRq dXN0IChBREU3ODc4IG9ubHkpLgo+ID4+IDB4NDNBMQlDRldHQUlOCWluX3Bvd2VyMF9waGFzZUNf ZnVuZGFtZW50YWxfc2NhbGUJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlQaGFzZSBDIGZ1bmRh bWVudGFsIGFjdGl2ZSBwb3dlciBnYWluIGFkanVzdC4KPiA+PiAweDQzQTIJQ0ZXQVRUT1MJaW5f cG93ZXIwX3BoYXNlQ19mdW5kYW1lbnRhbF9vZmZzZXQJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAw MAlQaGFzZSBDIGZ1bmRhbWVudGFsIGFjdGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0IChBREU3ODc4 IG9ubHkpLgo+ID4+IDB4NDNBMwlBRlZBUkdBSU4JaW5fcG93ZXJyZWFjdGl2ZTBfcGhhc2VBX2Z1 bmRhbWVudGFsX3NjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSBmdW5kYW1l bnRhbCByZWFjdGl2ZSBwb3dlciBnYWluIGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiA+PiAweDQz QTQJQUZWQVJPUwlpbl9wb3dlcnJlYWN0aXZlMF9waGFzZUFfZnVuZGFtZW50YWxfb2Zmc2V0CVIv VwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQSBmdW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dl ciBvZmZzZXQgYWRqdXN0IChBREU3ODc4IG9ubHkpLgo+ID4+IDB4NDNBNQlCRlZBUkdBSU4JaW5f cG93ZXJyZWFjdGl2ZTBfcGhhc2VCX2Z1bmRhbWVudGFsX3NjYWxlCVIvVwkyNAkzMiBaUFNFCVMJ MHgwMDAwMDAJUGhhc2UgQiBmdW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dlciBnYWluIGFkanVzdCAo QURFNzg3OCBvbmx5KS4KPiA+PiAweDQzQTYJQkZWQVJPUwlpbl9wb3dlcnJlYWN0aXZlMF9waGFz ZUJfZnVuZGFtZW50YWxfb2Zmc2V0CVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQiBm dW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQgYWRqdXN0IChBREU3ODc4IG9ubHkpLgo+ ID4+IDB4NDNBNwlDRlZBUkdBSU4JaW5fcG93ZXJyZWFjdGl2ZTBfcGhhc2VDX2Z1bmRhbWVudGFs X3NjYWxlCVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAJUGhhc2UgQyBmdW5kYW1lbnRhbCByZWFj dGl2ZSBwb3dlciBnYWluIGFkanVzdCAoQURFNzg3OCBvbmx5KS4KPiA+PiAweDQzQTgJQ0ZWQVJP Uwlpbl9wb3dlcnJlYWN0aXZlMF9waGFzZUNfZnVuZGFtZW50YWxfb2Zmc2V0CVIvVwkyNAkzMiBa UFNFCVMJMHgwMDAwMDAJUGhhc2UgQyBmdW5kYW1lbnRhbCByZWFjdGl2ZSBwb3dlciBvZmZzZXQg YWRqdXN0IChBREU3ODc4IG9ubHkpLgo+ID4+IDB4NDNBOQlWQVRIUjEJcmVnaWlzdGVyX1ZBVEhS MQlSL1cJMjQJMzIgWlAJVQkweDAwMDAwMAlNb3N0IHNpZ25pZmljYW50IDI0IGJpdHMgb2YgVkFU SFJbNDc6MF0gdGhyZXNob2xkIHVzZWQgaW4gcGhhc2UgYXBwYXJlbnQgcG93ZXIgZGF0YXBhdGgu ICAKPiA+IERvIG5vdCBleHBvc2UgdGhlc2UgdG8gdXNlcnNwYWNlLiBXaHkgd291bGQgaXQgY2Fy ZT8KPiA+ICAgCj4gPj4gMHg0M0FBCVZBVEhSMAlyZWdpc3Rlcl9WQVRIUjAJUi9XCTI0CTMyIFpQ CVUJMHgwMDAwMDAJTGVzcyBzaWduaWZpY2FudCAyNCBiaXRzIG9mIFZBVEhSWzQ3OjBdIHRocmVz aG9sZCB1c2VkIGluIHBoYXNlIGFwcGFyZW50IHBvd2VyIGRhdGFwYXRoLgo+ID4+IDB4NDNBQglX VEhSMQlyZWdpc3Rlcl9XVEhSMQlSL1cJMjQJMzIgWlAJVQkweDAwMDAwMAlNb3N0IHNpZ25pZmlj YW50IDI0IGJpdHMgb2YgV1RIUls0NzowXSB0aHJlc2hvbGQgdXNlZCBpbiBwaGFzZSB0b3RhbC9m dW5kYW1lbnRhbCBhY3RpdmUgcG93ZXIgZGF0YXBhdGguCj4gPj4gMHg0M0FDCVdUSFIwCXJlZ2lz dGVyX1dUSFIwCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAwCUxlc3Mgc2lnbmlmaWNhbnQgMjQgYml0 cyBvZiBXVEhSWzQ3OjBdIHRocmVzaG9sZCB1c2VkIGluIHBoYXNlIHRvdGFsL2Z1bmRhbWVudGFs IGFjdGl2ZSBwb3dlciBkYXRhcGF0aC4KPiA+PiAweDQzQUQJVkFSVEhSMQlyZWdpc3Rlcl9WQVJU SFIxCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAwCU1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiBW QVJUSFJbNDc6MF0gdGhyZXNob2xkIHVzZWQgaW4gcGhhc2UgdG90YWwvZnVuZGFtZW50YWwgcmVh Y3RpdmUgcG93ZXIgZGF0YXBhdGggKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4KS4KPiA+ PiAweDQzQUUJVkFSVEhSMAlyZWdpc3Rlcl9WQVJUSFIwCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAw CUxlc3Mgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiBWQVJUSFJbNDc6MF0gdGhyZXNob2xkIHVzZWQg aW4gcGhhc2UgdG90YWwvZnVuZGFtZW50YWwgcmVhY3RpdmUgcG93ZXIgZGF0YXBhdGggKEFERTc4 NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4KS4KPiA+PiAweDQzQUYJUmVzZXJ2ZWQJCU4vQTQJTi9B NAlOL0E0CU4vQTQJMHgwMDAwMDAJVGhpcyBtZW1vcnkgbG9jYXRpb24gc2hvdWxkIGJlIGtlcHQg YXQgMHgwMDAwMDAgZm9yIHByb3BlciBvcGVyYXRpb24uCj4gPj4gMHg0M0IwCVZBTk9MT0FECXJl Z2lzdGVyX1ZBTk9MT0FECVIvVwkyNAkzMiBaUFNFCVMJMHgwMDAwMDAwCU5vIGxvYWQgdGhyZXNo b2xkIGluIHRoZSBhcHBhcmVudCBwb3dlciBkYXRhcGF0aC4gIAo+ID4gVGhpcyBvbmUgaXMga2lu ZCBvZiBhbiBldmVudCBwYXJhbWV0ZXIsIGJ1dCBvbmUgdGhhdCBjb250cm9scyBpbnRlcm5hbCBj cmVlcCBwcmV2ZW50aW9uLgo+ID4gVGhpcyB3aWxsIGJlIGEgZHJpdmVyIHNwZWNpZmljIGF0dHIg SSB0aGluayBmb3Igbm93LiBXZSBtYXkgYWRkIGl0IHRvIGluZm9fbWFzawo+ID4gbGF0ZXIgaWYg d2UgZ2V0IGxvdHMgb2YgbWV0ZXIgZHJpdmVycy4gCj4gPiBTb21ldGhpbmcgbGlrZQo+ID4gaW5f cG93ZXIwX25vX2xvYWRfdGhyZXNoIHRob3VnaCBJIGhhdmVuJ3QgcmVhbGx5IHRob3VnaHQgYWJv dXQgaXQgb3IgbG9va2VkCj4gPiBmb3Igc2ltaWxhciBwcmVjZWRlbmNlLgo+ID4gCj4gPiAgIAo+ ID4+IDB4NDNCMQlBUE5PTE9BRAlyZWdpc3Rlcl9BUE5PTE9BRAlSL1cJMjQJMzIgWlBTRQlTCTB4 MDAwMDAwMAlObyBsb2FkIHRocmVzaG9sZCBpbiB0aGUgdG90YWwvZnVuZGFtZW50YWwgYWN0aXZl IHBvd2VyIGRhdGFwYXRoLiAgCj4gPiBpbl9hY3RpdmVwb3dlcjBfbm9fbG9hZF90aHJlc2ggIAo+ ID4+IDB4NDNCMglWQVJOT0xPQUQJcmVnaXN0ZXJfVkFSTk9MT0FECVIvVwkyNAkzMiBaUFNFCVMJ MHgwMDAwMDAwCU5vIGxvYWQgdGhyZXNob2xkIGluIHRoZSB0b3RhbC9mdW5kYW1lbnRhbCByZWFj dGl2ZSBwb3dlciBkYXRhcGF0aC4gTG9jYXRpb24gcmVzZXJ2ZWQgZm9yIEFERTc4NTQuICAKPiA+ IGluX3JlYWN0aXZwb3dlcjBfbm9fbG9hZF90aHJlc2gKPiA+ICAgCj4gPj4gMHg0M0IzCVZMRVZF TAlyZWdpc3Rlcl9WTEVWRUwJUi9XCTI0CTMyIFpQU0UJUwkweDAwMDAwMAlSZWdpc3RlciB1c2Vk IGluIHRoZSBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyB0aGUgZnVuZGFtZW50YWwgYWN0aXZlIGFu ZCByZWFjdGl2ZSBwb3dlcnMgKEFERTc4Nzggb25seSkuICAKPiA+IFRoaXMgb25lIGxvb2tzIGxp a2UgYSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgY2lyY3VpdCBhdHRhY2hlZC4gIFNvIHNob3VsZCBi ZSBkZXZpY2V0cmVlCj4gPiBvciBzaW1pbGFyIGFuZCBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2Uu Cj4gPiAgIAo+ID4+IDB4NDNCNQlESUNPRUZGCXJlZ2lzdGVyX0RJQ09FRkYJUi9XCTI0CTMyIFpQ U0UJUwkweDAwMDAwMDAJUmVnaXN0ZXIgdXNlZCBpbiB0aGUgZGlnaXRhbCBpbnRlZ3JhdG9yIGFs Z29yaXRobS4gSWYgdGhlIGludGVncmF0b3IgaXMgdHVybmVkIG9uLCBpdCBtdXN0IGJlIHNldCBh dCAweEZGODAwMC4gSW4gcHJhY3RpY2UsIGl0IGlzIHRyYW5zbWl0dGVkIGFzIDB4RkZGODAwMC4g IAo+ID4gbm8gdXNlcnNwYWNlIGludGVyZmFjZS4KPiA+ICAgCj4gPj4gMHg0M0I2CUhQRkRJUwly ZWdpc3Rlcl9IUEZESVMJUi9XCTI0CTMyIFpQCVUJMHgwMDAwMDAJRGlzYWJsZXMvZW5hYmxlcyB0 aGUgSFBGIGluIHRoZSBjdXJyZW50IGRhdGFwYXRoIChzZWUgVGFibGUgMzQpLiAgCj4gPiBXZSBo YXZlIGNvbnRyb2xzIGZvciBoaWdoIHBhc3MgZmlsdGVycywgeW91J2xsIG5lZWQgdG8gbWFwIG9u IHRvIHRoZW0uCj4gPiBEaXNhYmxlIGlzIHVzdWFsbHkgc2V0dGluZyAzREIgcG9pbnQgdG8gMCBJ SVJDLgo+ID4gICAKPiA+PiAweDQzQjgJSVNVTUxWTAlyZWdpc3Rlcl9JU1VNTFZMCVIvVwkyNAkz MiBaUFNFCVMJMHgwMDAwMDAJVGhyZXNob2xkIHVzZWQgaW4gY29tcGFyaXNvbiBiZXR3ZWVuIHRo ZSBzdW0gb2YgcGhhc2UgY3VycmVudHMgYW5kIHRoZSBuZXV0cmFsIGN1cnJlbnQgKEFERTc4Njgg YW5kIEFERTc4Nzggb25seSkuICAKPiA+IFRoaXMgaXMgYW4gZXZlbnQgdGhyZXNob2xkIHNvIG5l ZWRzIHRvIG1hcCB0byB0aGUgZXZlbnRzIGluZnJhc3RydWN0dXJlCj4gPiBhcyBiZXN0IHdlIGNh bi4gIEl0J3MgYWN0dWFsbHkgYSBwYWluIHRvIGRlc2NyaWJlIHNvIG1heSBiZSBkZXZpY2Ugc3Bl Y2lmaWMgQUJJLgo+ID4gICAKPiA+PiAweDQzQkYJSVNVTQlyZWdpc3Rlcl9JU1VNCVIJMjgJMzIg WlAJUwlOL0E0CVN1bSBvZiBJQVdWLCBJQldWLCBhbmQgSUNXViByZWdpc3RlcnMgKEFERTc4Njgg YW5kIEFERTc4Nzggb25seSkuICAKPiA+IFNvIHRoaXMgd291bGQgYmUgdXNpbmcgYSBtb2RpZmll ciBmb3IgQWFuZEJhbmRDIHBoYXNlcyAoc2ltaWxhciB0byB0aGUgWGFuZFlhblogb25lcyBmb3Ig bWVtcyBkZXZpY2VzIGFuZAo+ID4gYSBkZXJpdmVkIHZhbHVlIG9mIHN1bSBJIHRoaW5rIFNvIHdv dWxkIGxvb2sgc29tZXRoaW5nIGxpa2UuCj4gPiBpbl9jdXJyZW50MF9waGFzZUEmcGhhc2VCJnBo YXNlQ19zdW0gYW5kIHlldCBhbm90aGVyIGNoYW5uZWwKPiA+ICAgCj4gPj4gMHg0M0MwCUFJUk1T CWluX2N1cnJlbnQwX3BoYXNlQV9ybXMJUgkyNAkzMiBaUAlTCU4vQTQJUGhhc2UgQSBjdXJyZW50 IHJtcyB2YWx1ZS4KPiA+PiAweDQzQzEJQVZSTVMJaW5fdm9sdGFnZTBfcGhhc2VBX3JtcwlSCTI0 CTMyIFpQCVMJTi9BNAlQaGFzZSBBIHZvbHRhZ2Ugcm1zIHZhbHVlLgo+ID4+IDB4NDNDMglCSVJN Uwlpbl9jdXJyZW50MF9waGFzZUJfcm1zCVIJMjQJMzIgWlAJUwlOL0E0CVBoYXNlIEIgY3VycmVu dCBybXMgdmFsdWUuCj4gPj4gMHg0M0MzCUJWUk1TCWluX3ZvbHRhZ2UwX3BoYXNlQl9ybXMJUgky NAkzMiBaUAlTCU4vQTQJUGhhc2UgQiB2b2x0YWdlIHJtcyB2YWx1ZS4KPiA+PiAweDQzQzQJQ0lS TVMJaW5fY3VycmVudDBfcGhhc2VDX3JtcwlSCTI0CTMyIFpQCVMJTi9BNAlQaGFzZSBDIGN1cnJl bnQgcm1zIHZhbHVlLgo+ID4+IDB4NDNDNQlDVlJNUwlpbl92b2x0YWdlMF9waGFzZUNfcm1zCVIJ MjQJMzIgWlAJUwlOL0E0CVBoYXNlIEMgdm9sdGFnZSBybXMgdmFsdWUuCj4gPj4gMHg0M0M2CU5J Uk1TCWluX2N1cnJlbnQwX25ldXRyYWxfcm1zCVIJMjQJMzIgWlAJUwlOL0E0CU5ldXRyYWwgY3Vy cmVudCBybXMgdmFsdWUgKEFERTc4NjggYW5kIEFERTc4Nzggb25seSkuCj4gPj4gMHhFMjI4CVJ1 bglyZWdpc3Rlcl9SdW4JUi9XCTE2CTE2CVUJMHgwMDAwCVJ1biByZWdpc3RlciBzdGFydHMgYW5k IHN0b3BzIHRoZSBEU1AuIFNlZSB0aGUgRGlnaXRhbCBTaWduYWwgUHJvY2Vzc29yIHNlY3Rpb24g Zm9yIG1vcmUgZGV0YWlscy4gIAo+ID4gTm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlLgo+ID4gICAK PiA+PiAweEU0MDAJQVdBVFRIUglpbl9lbmVyZ3kwX3BoYXNlQV9yYXcJUgkzMgkzMglTCTB4MDAw MDAwMDAJUGhhc2UgQSB0b3RhbCBhY3RpdmUgZW5lcmd5IGFjY3VtdWxhdGlvbi4KPiA+PiAweEU0 MDEJQldBVFRIUglpbl9lbmVyZ3kwX3BoYXNlQl9yYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhh c2UgQiB0b3RhbCBhY3RpdmUgZW5lcmd5IGFjY3VtdWxhdGlvbi4KPiA+PiAweEU0MDIJQ1dBVFRI Uglpbl9lbmVyZ3kwX3BoYXNlQ19yYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQyB0b3Rh bCBhY3RpdmUgZW5lcmd5IGFjY3VtdWxhdGlvbi4KPiA+PiAweEU0MDMJQUZXQVRUSFIJaW5fZW5l cmd5MF9waGFzZUFfZnVuZGFtZW50YWxfcmF3CVIJMzIJMzIJUwkweDAwMDAwMDAwCVBoYXNlIEEg ZnVuZGFtZW50YWwgYWN0aXZlIGVuZXJneSBhY2N1bXVsYXRpb24gKEFERTc4Nzggb25seSkuCj4g Pj4gMHhFNDA0CUJGV0FUVEhSCWluX2VuZXJneTBfcGhhc2VCX2Z1bmRhbWVudGFsX3JhdwlSCTMy CTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBCIGZ1bmRhbWVudGFsIGFjdGl2ZSBlbmVyZ3kgYWNjdW11 bGF0aW9uIChBREU3ODc4IG9ubHkpLgo+ID4+IDB4RTQwNQlDRldBVFRIUglpbl9lbmVyZ3kwX3Bo YXNlQ19mdW5kYW1lbnRhbF9yYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQyBmdW5kYW1l bnRhbCBhY3RpdmUgZW5lcmd5IGFjY3VtdWxhdGlvbiAoQURFNzg3OCBvbmx5KS4KPiA+PiAweEU0 MDYJQVZBUkhSCWluX2VuZXJneXJlYWN0aXZlMF9waGFzZUFfcmF3CVIJMzIJMzIJUwkweDAwMDAw MDAwCVBoYXNlIEEgdG90YWwgcmVhY3RpdmUgZW5lcmd5IGFjY3VtdWxhdGlvbiAoQURFNzg1OCwg QURFNzg2OCwgYW5kIEFERTc4Nzggb25seSkuCj4gPj4gMHhFNDA3CUJWQVJIUglpbl9lbmVyZ3ly ZWFjdGl2ZTBfcGhhc2VCX3JhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBCIHRvdGFsIHJl YWN0aXZlIGVuZXJneSBhY2N1bXVsYXRpb24gKEFERTc4NTgsIEFERTc4NjgsIGFuZCBBREU3ODc4 IG9ubHkpLgo+ID4+IDB4RTQwOAlDVkFSSFIJaW5fZW5lcmd5cmVhY3RpdmUwX3BoYXNlQ19yYXcJ UgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQyB0b3RhbCByZWFjdGl2ZSBlbmVyZ3kgYWNjdW11 bGF0aW9uIChBREU3ODU4LCBBREU3ODY4LCBhbmQgQURFNzg3OCBvbmx5KS4KPiA+PiAweEU0MDkJ QUZWQVJIUglpbl9lbmVyZ3lyZWFjdGl2ZTBfcGhhc2VBX2Z1bmRhbWVudGFsX3JhdwlSCTMyCTMy CVMJMHgwMDAwMDAwMAlQaGFzZSBBIGZ1bmRhbWVudGFsIHJlYWN0aXZlIGVuZXJneSBhY2N1bXVs YXRpb24gKEFERTc4Nzggb25seSkuCj4gPj4gMHhFNDBBCUJGVkFSSFIJaW5fZW5lcmd5cmVhY3Rp dmUwX3BoYXNlQl9mdW5kYW1lbnRhbF9yYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQiBm dW5kYW1lbnRhbCByZWFjdGl2ZSBlbmVyZ3kgYWNjdW11bGF0aW9uIChBREU3ODc4IG9ubHkpLgo+ ID4+IDB4RTQwQglDRlZBUkhSCWluX2VuZXJneXJlYWN0aXZlMF9waGFzZUNfZnVuZGFtZW50YWxf cmF3CVIJMzIJMzIJUwkweDAwMDAwMDAwCVBoYXNlIEMgZnVuZGFtZW50YWwgcmVhY3RpdmUgZW5l cmd5IGFjY3VtdWxhdGlvbiAoQURFNzg3OCBvbmx5KS4KPiA+PiAweEU0MEMJQVZBSFIJaW5fZW5l cmd5YXBwYXJlbnQwX3BoYXNlQV9yYXcJUgkzMgkzMglTCTB4MDAwMDAwMDAJUGhhc2UgQSBhcHBh cmVudCBlbmVyZ3kgYWNjdW11bGF0aW9uLgo+ID4+IDB4RTQwRAlCVkFIUglpbl9lbmVyZ3lhcHBh cmVudDBfcGhhc2VCX3JhdwlSCTMyCTMyCVMJMHgwMDAwMDAwMAlQaGFzZSBCIGFwcGFyZW50IGVu ZXJneSBhY2N1bXVsYXRpb24uCj4gPj4gMHhFNDBFCUNWQUhSCWluX2VuZXJneWFwcGFyZW50MF9w aGFzZUNfcmF3CVIJMzIJMzIJUwkweDAwMDAwMDAwCVBoYXNlIEMgYXBwYXJlbnQgZW5lcmd5IGFj Y3VtdWxhdGlvbi4KPiA+PiAweEU1MDAJSVBFQUsJaW5fY3VycmVudDBfcGVhawlSCTMyCTMyCVUJ Ti9BCUN1cnJlbnQgcGVhayByZWdpc3Rlci4gU2VlIEZpZ3VyZSA1MCBhbmQgVGFibGUgMzUgZm9y IGRldGFpbHMgYWJvdXQgaXRzIGNvbXBvc2l0aW9uLiAgCj4gPiBPaCBnb29keS4gSSBoYXZlIG5v IGlkZWEgaG93IHdlIGV4cG9zZSB0aGUgd2hpY2ggcGhhc2UgZWxlbWVudCBvZiB0aGlzCj4gPiBj bGVhbmx5LiAgT25lIG9wdGlvbiBJIHN1cHBvc2UgaXMgdG8gaGF2ZSBpbl9jdXJyZW50MF9waGFz ZUFfcGVhayBldGMKPiA+IGFuZCBoYXZlIGFsbCBidXQgdGhlIGN1cnJlbnQgcGVhayByZXR1cm4g YW4gZXJyb3Igd2hlbiByZWFkPyBJdCBpcyBhIGJpdAo+ID4gbmFzdHkgYnV0IG9ubHkgc28gbXVj aCB3ZSBjYW4gZG8gYW5kIGtlZXAgd2l0aCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlLgo+ID4gICAK PiA+PiAweEU1MDEJVlBFQUsJaW5fdm9sdGFnZV9wZWFrCVIJMzIJMzIJVQlOL0EJVm9sdGFnZSBw ZWFrIHJlZ2lzdGVyLiBTZWUgRmlndXJlIDUwIGFuZCBUYWJsZSAzNiBmb3IgZGV0YWlscyBhYm91 dCBpdHMgY29tcG9zaXRpb24uICAKPiA+IFNhbWUgYXMgcGVhay4KPiA+ICAgCj4gPj4gMHhFNTAy CVNUQVRVUzAJcmVnaXN0ZXJfU1RBVFVTMAlSL1cJMzIJMzIJVQlOL0EJSW50ZXJydXB0IFN0YXR1 cyBSZWdpc3RlciAwLiBTZWUgVGFibGUgMzcuCj4gPj4gMHhFNTAzCVNUQVRVUzEJcmVnaXN0ZXJf U1RBVFVTMQlSL1cJMzIJMzIJVQlOL0EJSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAxLiBTZWUg VGFibGUgMzguICAKPiA+IE5vIHVzZXJzcGFjZSBpbnRlcmZhY2UgZXhjZXB0IHZpYSBldmVudHMg aW50ZXJmYWNlIG9yIGVycm9yIHJlcG9ydHMuCj4gPiAgIAo+ID4+IDB4RTUwNAlBSU1BVglpbl9j dXJyZW50QV9tYXYJUgkyMAkzMiBaUAlVCU4vQQlQaGFzZSBBIGN1cnJlbnQgbWVhbiBhYnNvbHV0 ZSB2YWx1ZSBjb21wdXRlZCBkdXJpbmcgUFNNMCBhbmQgUFNNMSBtb2RlcyAoQURFNzg2OCBhbmQg QURFNzg3OCBvbmx5KS4gIAo+ID4gUHJvYmFibHkgYSBsb25nZXIgbmFtZSBhcyBtYXYgaXMgY3J5 cHRpYy4KPiA+IGluX2N1cnJlbnQwX3BoYXNlQV9tZWFuYWJzX3JhdyAtIGl0IGNvdWxkIGhhdmUg YSBzY2FsZSBhbmQgYWxsIHNvcnRzIG9mIGZ1bi4KPiA+IFNvIEkgdGhpbmsgdGhpcyBuZWVkcyB0 byBiZSB1c2luZyB0aGUgbmV3IGRlcml2ZWQgaW5mcmFzdHJ1Y3R1cmUgcHJvcG9zZWQgaGVyZQo+ ID4gcmF0aGVyIHRoYW4gYmVpbmcgYW4gaW5mb19tYXNrIGVsZW1lbnQuCj4gPiAgIAo+ID4+IDB4 RTUwNQlCSU1BVglpbl9jdXJyZW50Ql9tYXYJUgkyMAkzMiBaUAlVCU4vQQlQaGFzZSBCIGN1cnJl bnQgbWVhbiBhYnNvbHV0ZSB2YWx1ZSBjb21wdXRlZCBkdXJpbmcgUFNNMCBhbmQgUFNNMSBtb2Rl cyAoQURFNzg2OCBhbmQgQURFNzg3OCBvbmx5KS4KPiA+PiAweEU1MDYJQ0lNQVYJaW5fY3VycmVu dENfbWF2CVIJMjAJMzIgWlAJVQlOL0EJUGhhc2UgQyBjdXJyZW50IG1lYW4gYWJzb2x1dGUgdmFs dWUgY29tcHV0ZWQgZHVyaW5nIFBTTTAgYW5kIFBTTTEgbW9kZXMgKEFERTc4NjggYW5kIEFERTc4 Nzggb25seSkuCj4gPj4gMHhFNTA3CU9JTFZMCXJlZ2lzdGVyX09JTFZMCVIvVwkyNAkzMiBaUAlV CTB4RkZGRkZGCU92ZXJjdXJyZW50IHRocmVzaG9sZC4KPiA+PiAweEU1MDgJT1ZMVkwJcmVnaXN0 ZXJfT1ZMVkwJUi9XCTI0CTMyIFpQCVUJMHhGRkZGRkYJT3ZlcnZvbHRhZ2UgdGhyZXNob2xkLiAg Cj4gPiBUaGVzZSBwcmVzdW1hYmx5IHJlc3VsdCBpbiBpbnRlcnJ1cHRzPyAoSSdtIHJ1bm5pbmcg b3V0IG9mIHRpbWUgc28gbm90IGNoZWNraW5nKQo+ID4gSW4gd2hpY2ggY2FzZSBzdGFuZGFyZCBl dmVudCBpbnRlcmZhY2Ugc2hvdWxkIHdvcmsuCj4gPiAgIAo+ID4+IDB4RTUwOQlTQUdMVkwJcmVn aXN0ZXJfU0FHTFZMCVIvVwkyNAkzMiBaUAlVCTB4MDAwMDAwCVZvbHRhZ2UgU0FHIGxldmVsIHRo cmVzaG9sZC4gIAo+ID4gVGhhdCdzIGFub3RoZXIgZXZlbnQgSSB0aGluay4uLiAKPiA+ICAgCj4g Pj4gMHhFNTBBCU1BU0swCXJlZ2lzdGVyX01BU0swCVIvVwkzMgkzMglVCTB4MDAwMDAwMDAJSW50 ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAwLiBTZWUgVGFibGUgMzkuCj4gPj4gMHhFNTBCCU1BU0sx CXJlZ2lzdGVyX01BU0sxCVIvVwkzMgkzMglVCTB4MDAwMDAwMDAJSW50ZXJydXB0IEVuYWJsZSBS ZWdpc3RlciAxLiBTZWUgVGFibGUgNDAuICAKPiA+ICAgCj4gPj4gMHhFNTBDCUlBV1YJaW5fY3Vy cmVudEFfaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUg b2YgUGhhc2UgQSBjdXJyZW50Lgo+ID4+IDB4RTUwRAlJQldWCWluX2N1cnJlbnRCX2luc3RhbnRh bmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBoYXNlIEIgY3Vy cmVudC4KPiA+PiAweEU1MEUJSUNXVglpbl9jdXJyZW50Q19pbnN0YW50YW5lb3VzCVIJMjQJMzIg U0UJUwlOL0EJSW5zdGFudGFuZW91cyB2YWx1ZSBvZiBQaGFzZSBDIGN1cnJlbnQuCj4gPj4gMHhF NTBGCUlOV1YJaW5fY3VycmVudE5faW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3Rh bnRhbmVvdXMgdmFsdWUgb2YgbmV1dHJhbCBjdXJyZW50IChBREU3ODY4IGFuZCBBREU3ODc4IG9u bHkpLgo+ID4+IDB4RTUxMAlWQVdWCWluX3ZvbHRhZ2VBX2luc3RhbnRhbmVvdXMJUgkyNAkzMiBT RQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBoYXNlIEEgdm9sdGFnZS4KPiA+PiAweEU1 MTEJVkJXVglpbl92b2x0YWdlQl9pbnN0YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5zdGFu dGFuZW91cyB2YWx1ZSBvZiBQaGFzZSBCIHZvbHRhZ2UuCj4gPj4gMHhFNTEyCVZDV1YJaW5fdm9s dGFnZUNfaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUg b2YgUGhhc2UgQyB2b2x0YWdlLiAgCj4gPiBPSywgdGhpcyBpcyBnZXR0aW5nIHNpbGx5LiAgSSBw cmVzdW1lIHRoaXMgbWVhbnMgdGhlIHZhbHVlcyBhYm92ZSBhcmUgZmlsdGVyZWQgYW5kIHRoZXNl Cj4gPiBhcmVuJ3Q/ICBJZiBzbyB5b3UgbmVlZCB0byBoYXZlIGNoYW5uZWxzIGZvciBib3RoIGFu ZCBkaWZmZXJlbnQgZmlsdGVyIHZhbHVlcy4KPiA+ICAgCj4gPj4gMHhFNTEzCUFXQVRUCWluX3Bv d2VyQV9pbnN0YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5zdGFudGFuZW91cyB2YWx1ZSBv ZiBQaGFzZSBBIHRvdGFsIGFjdGl2ZSBwb3dlci4KPiA+PiAweEU1MTQJQldBVFQJaW5fcG93ZXJC X2luc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBo YXNlIEIgdG90YWwgYWN0aXZlIHBvd2VyLgo+ID4+IDB4RTUxNQlDV0FUVAlpbl9wb3dlckNfaW5z dGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2Ug QyB0b3RhbCBhY3RpdmUgcG93ZXIuCj4gPj4gMHhFNTE2CUFWQVIJaW5fcG93ZXJyZWFjdGl2ZUFf aW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhh c2UgQSB0b3RhbCByZWFjdGl2ZSBwb3dlciAoQURFNzg1OCwgQURFNzg2OCwgYW5kIEFERTc4Nzgg b25seSkuCj4gPj4gMHhFNTE3CUJWQVIJaW5fcG93ZXJyZWFjdGl2ZUJfaW5zdGFudGFuZW91cwlS CTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQiB0b3RhbCByZWFj dGl2ZSBwb3dlciAoQURFNzg1OCwgQURFNzg2OCwgYW5kIEFERTc4Nzggb25seSkuCj4gPj4gMHhF NTE4CUNWQVIJaW5fcG93ZXJyZWFjdGl2ZUNfaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9B CUluc3RhbnRhbmVvdXMgdmFsdWUgb2YgUGhhc2UgQyB0b3RhbCByZWFjdGl2ZSBwb3dlciAoQURF Nzg1OCwgQURFNzg2OCwgYW5kIEFERTc4Nzggb25seSkuCj4gPj4gMHhFNTE5CUFWQQlpbl9wb3dl cmFwcGFyZW50QV9pbnN0YW50YW5lb3VzCVIJMjQJMzIgU0UJUwlOL0EJSW5zdGFudGFuZW91cyB2 YWx1ZSBvZiBQaGFzZSBBIGFwcGFyZW50IHBvd2VyLgo+ID4+IDB4RTUxQQlCVkEJaW5fcG93ZXJh cHBhcmVudEJfaW5zdGFudGFuZW91cwlSCTI0CTMyIFNFCVMJTi9BCUluc3RhbnRhbmVvdXMgdmFs dWUgb2YgUGhhc2UgQiBhcHBhcmVudCBwb3dlci4KPiA+PiAweEU1MUIJQ1ZBCWluX3Bvd2VyYXBw YXRlbnRDX2luc3RhbnRhbmVvdXMJUgkyNAkzMiBTRQlTCU4vQQlJbnN0YW50YW5lb3VzIHZhbHVl IG9mIFBoYXNlIEMgYXBwYXJlbnQgcG93ZXIuICAKPiA+IFNhbWUgZm9yIGFsbCBvZiB0aGVzZS4K PiA+ICAgCj4gPj4gMHhFNTFGCUNIRUNLU1VNCXJlZ2lzdGVyX0NIRUNLU1VNCVIJMzIJMzIJVQkw eDMzNjY2Nzg3CUNoZWNrc3VtIHZlcmlmaWNhdGlvbi4gU2VlIHRoZSBDaGVja3N1bSBSZWdpc3Rl ciBzZWN0aW9uIGZvciBkZXRhaWxzLiAgCj4gPiBOb3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCj4g PiAgIAo+ID4+IDB4RTUyMAlWTk9NCWluX3ZvbHRhZ2Vfcm1zX25vbWluYWwJUi9XCTI0CTMyIFpQ CVMJMHgwMDAwMDAJTm9taW5hbCBwaGFzZSB2b2x0YWdlIHJtcyB1c2VkIGluIHRoZSBhbHRlcm5h dGl2ZSBjb21wdXRhdGlvbiBvZiB0aGUgYXBwYXJlbnQgcG93ZXIuIFdoZW4gdGhlIFZOT014RU4g Yml0IGlzIHNldCwgdGhlIGFwcGxpZWQgdm9sdGFnZSBpbnB1dCBpbiB0aGUgY29ycmVzcG9uZGlu ZyBwaGFzZSBpcyBpZ25vcmVkIGFuZCBhbGwgY29ycmVzcG9uZGluZyBybXMgdm9sdGFnZSBpbnN0 YW5jZXMgYXJlIHJlcGxhY2VkIGJ5IHRoZSB2YWx1ZSBpbiB0aGUgVk5PTSByZWdpc3Rlci4gIAo+ ID4gV2h5IHdvdWxkIHRoaXMgYmUgZG9uZT8gIFNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGlz IGEgY2lyY3VpdCBkZXNpZ24gdGltZQo+ID4gZGVjaXNpb24gc28gYSBqb2IgZm9yIERUIHRvIG1l Lgo+ID4gICAKPiA+PiAweEU2MDAJUEhTVEFUVVMJaW5fY3VycmVudF9waGFzZV9wZWFrCVIJMTYJ MTYJVQlOL0EJUGhhc2UgcGVhayByZWdpc3Rlci4gU2VlIFRhYmxlIDQxLgo+ID4+IDB4RTYwMQlB TkdMRTAJcmVnaXN0ZXJfQU5HTEUwCVIJMTYJMTYJVQlOL0EJVGltZSBEZWxheSAwLiBTZWUgdGhl IFRpbWUgSW50ZXJ2YWwgQmV0d2VlbiBQaGFzZXMgc2VjdGlvbiBmb3IgZGV0YWlscy4KPiA+PiAw eEU2MDIJQU5HTEUxCXJlZ2lzdGVyX0FOR0xFMQlSCTE2CTE2CVUJTi9BCVRpbWUgRGVsYXkgMS4g U2VlIHRoZSBUaW1lIEludGVydmFsIEJldHdlZW4gUGhhc2VzIHNlY3Rpb24gZm9yIGRldGFpbHMu Cj4gPj4gMHhFNjAzCUFOR0xFMglyZWdpc3Rlcl9BTkdMRTIJUgkxNgkxNglVCU4vQQlUaW1lIERl bGF5IDIuIFNlZSB0aGUgVGltZSBJbnRlcnZhbCBCZXR3ZWVuIFBoYXNlcyBzZWN0aW9uIGZvciBk ZXRhaWxzLiAgCj4gPiBIbW0uIE1vcmUgZnVuLiAgVGhlc2UgYXJlIGRlcml2ZWQgdmFsdWVzIGJl dHdlZW4gdG8gcGhhc2UgbWVhc3VyZW1lbnRzLiAKPiA+IFRoZSBwaGFzZSBhcyBhIG1vZGlmaWVy IGZhbGxzIGRvd24gYSBiaXQgaGVyZSAtIGlmIHdlIGhhZCBqdXN0IHRyZWF0ZWQKPiA+IHRoZW0g YXMgY2hhbm5lbHMgd2UgY291bGQgaGF2ZSBkb25lIHRoaXMgYSBkaWZmZXJlbnRpYWwgYW5nbGUg Y2hhbm5lbC4KPiA+IFJpZ2h0IG5vdyBJJ20gbm90IHN1cmUgaG93IHdlIGRvIHRoaXMsIGNvdWxk IGRvIGl0IGFzIGEgZGVyaXZlZCB2YWx1ZXMgc28gc29tZXRoaW5nIGxpa2UKPiA+IGluX2FuZ2xl MF9waGFzZUEmcGhhc2VCX2RpZmZfcmF3IGV0YyBidXQgdGhhdCBmZWVscyBvZGQuCj4gPiBUaGlz IG9uZSBuZWVkcyBtb3JlIHRob3VnaHQuCj4gPiAgIAo+ID4+IDB4RTYwNCB0byAweEU2MDYJUmVz ZXJ2ZWQJCQkJCQkJVGhlc2UgYWRkcmVzc2VzIHNob3VsZCBub3QgYmUgd3JpdHRlbiBmb3IgcHJv cGVyIG9wZXJhdGlvbi4KPiA+PiAweEU2MDcJUEVSSU9ECXJlZ2lzdGVyX1BFUklPRAlSCTE2CTE2 CVUJTi9BCU5ldHdvcmsgbGluZSBwZXJpb2QuICAKPiA+IFN1cGVyZmljaWFsbHkgdGhpcyBzb3Vu ZHMgbGlrZSBhIGNoYW5uZWwgZnJlZSBlbGVtZW50IHNvIHNoYXJlZF9ieV9hbGwuCj4gPiAgIAo+ ID4+IDB4RTYwOAlQSE5PTE9BRAlyZWdpc3Rlcl9QSE5PTE9BRAlSCTE2CTE2CVUJTi9BCVBoYXNl IG5vIGxvYWQgcmVnaXN0ZXIuIFNlZSBUYWJsZSA0Mi4gIAo+ID4gSG1tLiBTbyB0aGlzIGlzIGtp bmQgb2YgYSBzZXQgb2YgZXZlbnRzIHdpdGggYnV0IHdpdGhvdXQgSSB0aGluayBhbiBpbnRlcnJ1 cHQuCj4gPiBPZGQuCj4gPiAgIAo+ID4+IDB4RTYwQwlMSU5FQ1lDCXJlZ2lzdGVyX0xJTkVDWUMJ Ui9XCTE2CTE2CVUJMHhGRkZGCUxpbmUgY3ljbGUgYWNjdW11bGF0aW9uIG1vZGUgY291bnQuICAK PiA+IGluX2NvdW50MF9yYXcgcHJvYmFibHkgdGhvdWdoIGl0J3MgYSBiaXQgb2YgYSBzdHJldGNo Lgo+ID4gICAKPiA+PiAweEU2MEQJWlhUT1VUCXJlZ2lzdGVyX1pYVE9VVAlSL1cJMTYJMTYJVQkw eEZGRkYJWmVyby1jcm9zc2luZyB0aW1lb3V0IGNvdW50LiAgCj4gPiBUaGlzIGlzIGdvaW5nIHRv IGJlIGFub3RoZXIgdG9wIGxldmVsIG9uZSBJIHRoaW5rIGFuZCBkZXZpY2Ugc3BlY2lmaWMgZm9y IG5vdy4KPiA+ICAgCj4gPj4gMHhFNjBFCUNPTVBNT0RFCXJlZ2lzdGVyX0NPTVBNT0RFCVIvVwkx NgkxNglVCTB4MDFGRglDb21wdXRhdGlvbi1tb2RlIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDMuICAK PiA+IElmIHRoZXJlIGlzIHN0dWZmIHRvIGNvbnRyb2wgaW4gaGVyZSBpdCBuZWVkIGJyZWFraW5n IG91dC4KPiA+ICAgCj4gPj4gMHhFNjBGCUdhaW4JcmVnaXN0ZXJfR2FpbglSL1cJMTYJMTYJVQkw eDAwMDAJUEdBIGdhaW5zIGF0IEFEQyBpbnB1dHMuIFNlZSBUYWJsZSA0NC4gIAo+ID4gT2ggZ29v ZHkgYW5vdGhlciBzY2FsZSB2YWx1ZS4gTmVlZHMgYnJlYWtpbmcgdXAgaW50byBzZXBhcmF0ZSBj b250cm9scy4KPiA+IERvIHRoZXNlIGRpcmVjdGx5IGVmZmVjdCB0aGUgbWVhc3VyZWQgb3V0cHV0 IHZvbHRhZ2UgZXRjPyBJZiB0aGV5IGRvIHRoZW4KPiA+IEknbSBub3Qgc3VyZSBob3cgdG8gc2Vw YXJhdGUgdGhlIHR3byBnYWlucywgdGhlcmUgb3VnaHQgdG8gYmUgYSAncmlnaHQnCj4gPiBhbnN3 ZXIuICBJZiB0aGlzIGlzIGFib3V0IG1hdGNoaW5nIHRvIHRoZSBjaXJjdWl0IHByZXNlbnQgdGhl biB0aGV5Cj4gPiBzaG91bGQgcHJvYmFibHkgYmUgY29taW5nIGZyb20gRFQgb3Igc2ltaWxsYXIu Cj4gPiAKPiA+ICAgCj4gPj4gMHhFNjEwCUNGTU9ERQlyZWdpc3Rlcl9DRk1PREUJUi9XCTE2CTE2 CVUJMHgwRTg4CUNGeCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDUuCj4gPj4g MHhFNjExCUNGMURFTglyZWdpc3Rlcl9DRjFERU4JUi9XCTE2CTE2CVUJMHgwMDAwCUNGMSBkZW5v bWluYXRvci4KPiA+PiAweEU2MTIJQ0YyREVOCXJlZ2lzdGVyX0NGMkRFTglSL1cJMTYJMTYJVQkw eDAwMDAJQ0YyIGRlbm9taW5hdG9yLgo+ID4+IDB4RTYxMwlDRjNERU4JcmVnaXN0ZXJfQ0YzREVO CVIvVwkxNgkxNglVCTB4MDAwMAlDRjMgZGVub21pbmF0b3IuICAKPiA+IEFyZSB0aGVzZSB0aGlu Z3MgdGhhdCBzaG91bGQgYmUgaW4gRFQ/ICBMb29rIHZlcnkgcXVpY2tseSBsaWtlIHRoZXkgYXJl IHRvZG8gd2l0aCBvdGhlciBjaXJjdWl0cyBuZWFyYnkuCj4gPiAgIAo+ID4+IDB4RTYxNAlBUEhD QUwJcmVnaXN0ZXJfQVBIQ0FMCVIvVwkxMAkxNiBaUAlTCTB4MDAwMAlQaGFzZSBjYWxpYnJhdGlv biBvZiBQaGFzZSBBLiBTZWUgVGFibGUgNDYuCj4gPj4gMHhFNjE1CUJQSENBTAlyZWdpc3Rlcl9C UEhDQUwJUi9XCTEwCTE2IFpQCVMJMHgwMDAwCVBoYXNlIGNhbGlicmF0aW9uIG9mIFBoYXNlIEIu IFNlZSBUYWJsZSA0Ni4KPiA+PiAweEU2MTYJQ1BIQ0FMCXJlZ2lzdGVyX19DUEhDQUwJUi9XCTEw CTE2IFpQCVMJMHgwMDAwCVBoYXNlIGNhbGlicmF0aW9uIG9mIFBoYXNlIEMuIFNlZSBUYWJsZSA0 Ni4gIAo+ID4gSSdtIG5vdCBhY3R1YWxseSBzdXJlIGhvdyB5b3Ugd291bGQgc2V0IHRoZXNlLiAg UGVyIGNpcmN1aXQgZGVzaWduPwo+ID4gICAKPiA+PiAweEU2MTcJUEhTSUdOCXJlZ2lzdGVyX1BI U0lHTglSCTE2CTE2CVUJTi9BCVBvd2VyIHNpZ24gcmVnaXN0ZXIuIFNlZSBUYWJsZSA0Ny4KPiA+ PiAweEU2MTgJQ09ORklHCXJlZ2lzdGVyX0NPTkZJRwlSL1cJMTYJMTYJVQkweDAwMDAJQURFNzg3 OCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBTZWUgVGFibGUgNDguCj4gPj4gMHhFNzAwCU1NT0RF CXJlZ2lzdGVyX19NTU9ERQlSL1cJOAk4CVUJMHgxQwlNZWFzdXJlbWVudCBtb2RlIHJlZ2lzdGVy LiBTZWUgVGFibGUgNDkuCj4gPj4gMHhFNzAxCUFDQ01PREUJcmVnaXN0ZXJfX0FDQ01PREUJUi9X CTgJOAlVCTB4MDAJQWNjdW11bGF0aW9uIG1vZGUgcmVnaXN0ZXIuIFNlZSBUYWJsZSA1MC4KPiA+ PiAweEU3MDIJTENZQ01PREUJcmVnaXN0ZXJfTENZQ01PREUJUi9XCTgJOAlVCTB4NzgJTGluZSBh Y2N1bXVsYXRpb24gbW9kZSBiZWhhdmlvci4gU2VlIFRhYmxlIDUyLgo+ID4+IDB4RTcwMwlQRUFL Q1lDCXJlZ2lzdGVyX1BFQUtDWUMJUi9XCTgJOAlVCTB4MDAJUGVhayBkZXRlY3Rpb24gaGFsZiBs aW5lIGN5Y2xlcy4KPiA+PiAweEU3MDQJU0FHQ1lDCXJlZ2lzdGVyX1NBR0NZQwlSL1cJOAk4CVUJ MHgwMAlTQUcgZGV0ZWN0aW9uIGhhbGYgbGluZSBjeWNsZXMuICAKPiA+IFNvbWUgb2YgdGhlc2Ug YXJlIGV2ZW50IGNvbnRyb2xzLiBNYXAgdGhlbSBhcyBzdWNoLgo+ID4gICAKPiA+PiAweEU3MDUJ Q0ZDWUMJcmVnaXN0ZXJfQ0ZDWUMJUi9XCTgJOAlVCTB4MDEJTnVtYmVyIG9mIENGIHB1bHNlcyBi ZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBlbmVyZ3kgbGF0Y2hlcy4gU2VlIHRoZSBTeW5jaHJvbml6 aW5nIEVuZXJneSBSZWdpc3RlcnMgd2l0aCBDRnggT3V0cHV0cyBzZWN0aW9uLgo+ID4+IDB4RTcw NglIU0RDX0NGRwlyZWdpc3Rlcl9IU0RDX0NGRwlSL1cJOAk4CVUJMHgwMAlIU0RDIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIuIFNlZSBUYWJsZSA1My4KPiA+PiAweEU3MDcJVmVyc2lvbglyZWdpc3Rl cl9WZXJzaW9uCVIJOAk4CVUJCVZlcnNpb24gb2YgZGllLgo+ID4+IDB4RUJGRglSZXNlcnZlZAkJ CTgJOAkJCVRoaXMgYWRkcmVzcyBjYW4gYmUgdXNlZCBpbiBtYW5pcHVsYXRpbmcgdGhlIFNTL0hT QSBwaW4gd2hlbiBTUEkgaXMgY2hvc2VuIGFzIHRoZSBhY3RpdmUgcG9ydC4gU2VlIHRoZSBTZXJp YWwgSW50ZXJmYWNlcyBzZWN0aW9uIGZvciBkZXRhaWxzLgo+ID4+IDB4RUMwMAlMUE9JTFZMCXJl Z2lzdGVyX0xQT0lMVkwJUi9XCTgJOAlVCTB4MDcJIk92ZXJjdXJyZW50IHRocmVzaG9sZCB1c2Vk IGR1cmluZyBQU00yIG1vZGUgKEFERTc4NjggYW5kIEFERTc4NzgKPiA+PiBvbmx5KS4gU2VlIFRh YmxlIDU0IGluIHdoaWNoIHRoZSByZWdpc3RlciBpcyBkZXRhaWxlZC4iCj4gPj4gMHhFQzAxCUNP TkZJRzIJcmVnaXN0ZXJfQ09ORklHMglSL1cJOAk4CVUJMHgwMAlDb25maWd1cmF0aW9uIHJlZ2lz dGVyIHVzZWQgZHVyaW5nIFBTTTEgbW9kZS4gU2VlIFRhYmxlIDU1LiAgCj4gPiAKPiA+IEFzIHlv dSBjYW4gZ3Vlc3MgSSB3YXMgcnVubmluZyBvdXQgb2Ygc3RhbWluYSB0b3dhcmRzIHRoZSBlbmQg b2YgdGhhdC4KPiA+IAo+ID4gSSdtIG5vdCB0b3RhbGx5IHN1cmUgb2YgdGhlIGFuc3dlciBJIHBy b3ZpZGVkLiBJdCBtYXkgdGFrZSBzb21lIG1vcmUgdGhvdWdodC4KPiA+IElkZWFsbHkgc29tZSBv dGhlcnMgd2lsbCBnaXZlIGlucHV0IG9uIHRoaXMgcXVlc3Rpb24uCj4gPiAKPiA+IEpvbmF0aGFu ICAKPiA+PiAKPiA+PiBSZWdhcmRzLAo+ID4+IEpvaG4KPiA+PiAKPiA+PiAKPiA+PiAKPiA+PiAK PiA+PiAgIAo+ID4+PiBPbiBNYXIgMTcsIDIwMTgsIGF0IDE6MzAgUE0sIEpvbmF0aGFuIENhbWVy b24gPGppYzIzQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4+PiAKPiA+Pj4gT24gV2VkLCAxNCBNYXIg MjAxOCAyMzoxMjowMiAtMDcwMAo+ID4+PiBKb2huIFN5bmUgPGpvaG4zOTA5QGdtYWlsLmNvbT4g d3JvdGU6Cj4gPj4+ICAgCj4gPj4+PiBIaSBKb25hdGhhbiwKPiA+Pj4+IAo+ID4+Pj4gSSBoYXZl IGJlZW4gbG9va2luZyBhdCB0aGUgSUlPIEFCSSBkb2NzIGFuZCBpZiBJIHVuZGVyc3RhbmQKPiA+ Pj4+IGNvcnJlY3RseSwgdGhlIGlkZWEgaXMgdG8gdXNlIGNvbnNpc3RlbnQgbmFtaW5nIGNvbnZl bnRpb25zPyBTbyBmb3IKPiA+Pj4+IGV4YW1wbGUsIGxvb2tpbmcgYXQgdGhlIEFERTc4NTQgZGF0 YXNoZWV0LCB0aGUgbmFtaW5nIG1hdGNoaW5nIHRoZQo+ID4+Pj4gQURFNzg1NCByZWdpc3RlcnMg d291bGQgYmUgYXMgZm9sbG93czogICAgCj4gPj4+IAo+ID4+PiBXZWxjb21lIHRvIG9uZSBvZiB0 aGUgYmlnIHJlYXNvbnMgbm8gb25lIHRpZGllZCB0aGVzZSBkcml2ZXJzCj4gPj4+IHVwIG9yaWdp bmFsbHkuICBTdGlsbCB3ZSBoYXZlIG1vdmVkIG9uIHNvbWV3aGF0IHNpbmNlIHRoZW4KPiA+Pj4g c28gc2ltaWxhciBjaXJjdW1zdGFuY2VzIGhhdmUgY29tZSB1cCBpbiBvdGhlciB0eXBlcyBvZiBz ZW5zb3IuCj4gPj4+ICAgCj4gPj4+PiAKPiA+Pj4+IHtkaXJlY3Rpb259X3t0eXBlfV97aW5kZXh9 X3ttb2RpZmllcn1fe2luZm9fbWFza30KPiA+Pj4+IAo+ID4+Pj4gQUlHQUlOCS0JSW5fY3VycmVu dF9hX2dhaW4gICAgCj4gPj4+IE90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCBnYWluIGlzbid0IGFu IEFCSSBlbGVtZW50IGFuZCB0aGF0IGluZGV4Cj4gPj4+IGRvZXNuJ3QgaGF2ZQo+ID4+PiBfIGJl Zm9yZSBpdCB0aGF0IGlzIHJpZ2h0Lgo+ID4+PiBpbl92b2x0YWdlQV9zY2FsZQo+ID4+PiAKPiA+ Pj4gVGhhdCB3YXMgYSB3ZWlyZCBxdWlyayBhIGxvbmcgdGltZSBiYWNrIHdoaWNoIHdlIHNob3Vs ZCBwcm9iYWJseQo+ID4+PiBub3QgaGF2ZSBkb25lIChjb3BpZWQgaXQgZnJvbSBod21vbikKPiA+ Pj4gICAKPiA+Pj4+IEFWR0FJTgktCWluX3ZvbHRhZ2VfYV9nYWluCj4gPj4+PiBCSUdBSU4JLQlp bl9jdXJyZW50X2JfZ2Fpbgo+ID4+Pj4gQlZHQUlOCS0JaW5fdm9sdGFnZV9iX2dhaW4KPiA+Pj4+ IOKAlAo+ID4+Pj4gSG93IGRvIHdlIHJlcHJlc2VudCB0aGUgcm1zIGFuZCBvZmZzZXQKPiA+Pj4+ IEFJUk1TT1MJLQlpbl9jdXJyZW50X2Ffcm1zb2Zmc2V0Cj4gPj4+PiBBVlJNU09TCS0JaW5fdm9s dGFnZV9hX3Jtc29mZnNldCAgICAKPiA+Pj4gCj4gPj4+IFJpZ2h0IG5vdyB3ZSBjYW4ndCB1bmZv cnR1bmF0ZWx5IHRob3VnaCB0aGlzIG9uZSBpcyBlYXNpZXIgdG8gZml4Lgo+ID4+PiBXZSBhbHJl YWR5IGhhdmUgbW9kaWZpZXJzIGZvciBtdWx0aSBheGlzIGRldmljZXMgZG9pbmcgc3VtX3NxdWFy ZWQKPiA+Pj4gc28gYWRkIG9uZSBvZiB0aG9zZSBmb3Igcm9vdF9tZWFuX3NxdWFyZSAtIHRoaXMg b25lIGlzIHdlbGwga25vd24KPiA+Pj4gZW5vdWdoIHRoYXQgcm1zIGlzIGZpbmUgaW4gdGhlIHN0 cmluZy4KPiA+Pj4gCj4gPj4+IEl0J3MgYSBlZmZlY3RpdmVseSBhIGRpZmZlcmVudCBjaGFubmVs IGJlIGl0IG9uZSBkZXJpdmVkIGZyb20gYSBzaW1wbGUKPiA+Pj4gb25lLiAgVGhpcyBpcyBnb2lu ZyB0byBnZXQgdHJpY2t5IGhvd2V2ZXIgYXMgd2Ugd291bGQgbm9ybWFsbHkgdXNlCj4gPj4+IG1v ZGlmaWVyIHRvIHNwZWNpYWxpc2UgYSBjaGFubmVsIHR5cGUgLSB0aG91Z2h0cyBvbiB0aGlzIGJl bG93Lgo+ID4+PiAgIAo+ID4+Pj4g4oCUCj4gPj4+PiBIZXJlIEkgZG9u4oCZdCB1bmRlcnN0YW5k IGhvdyB0byByZXByZXNlbnQgYm90aCB0aGUgcGhhc2UgYW5kIHRoZSBhY3RpdmUvcmVhY3RpdmUv YXBwYXJlbnQgcG93ZXIgY29tcG9uZW50cy4gRG8gd2UgY29tYmluZSB0aGUgcGhhc2UgYW5kIHF1 YWRyYXR1cmUgcGFydCBsaWtlIHRoaXMKPiA+Pj4+IEFWQUdBSU4JCS0JaW5fcG93ZXJfYV9nYWlu CQkJCS8qIGFwcGFyZW50IHBvd2VyICovCj4gPj4+PiDigJQKPiA+Pj4+IEFXR0FJTgkJLQlpbl9w b3dlcl9haV9nYWluCQkJCS8qIGFjdGl2ZSBwb3dlciAqLyAgICAKPiA+Pj4gQW5kIHRoYXQgaXMg dGhlIHByb2JsZW0uICBIb3cgZG8gd2UgcmVwcmVzZW50IHRoZSB2YXJpb3VzIHBvd2VyIHR5cGVz Lgo+ID4+PiBIbW0uIFdlIGNvdWxkIGRvIGl0IHdpdGggbW9kaWZpZXJzIGJ1dCBhYm92ZSB3ZSBz aG93IHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHVzZWQgdGhlbS4KPiA+Pj4gCj4gPj4+IEl0IHdvdWxk IGJlIGVhc3kgZW5vdWdoIHRvIGFkZCB5ZXQgYW5vdGhlciBmaWVsZCB0byB0aGUgY2hhbm5lbCBz cGVjIHRvIHNwZWNpZnkKPiA+Pj4gdGhpcyBidXQgdGhlcmUgaXMgYSBwcm9ibGVtIC0gRXZlbnRz LiAgVGhlIGV2ZW50IGZvcm1hdCBpcyBhbHJlYWR5IHByZXR0eSBmdWxsCj4gPj4+IHNvIHdoZXJl IGRvIHdlIHB1dCB0aGlzIGV4dHJhIGVsZW1lbnQgaWYgd2UgbmVlZCB0byBkZWZpbmUgYSBjaGFu bmVsIHNlcGFyYXRlZAo+ID4+PiBvbmx5IGJ5IGl0Lgo+ID4+PiAKPiA+Pj4gT25lIHRob3VnaHQg aXMgd2UgY291bGQgaW5zdGVhZCBkZWZpbmUgdGhlc2UgYXMgZGlmZmVyZW50IHRvcCBsZXZlbAo+ ID4+PiBJSU9fQ0hBTl9UWVBFUyBpbiBhIHNpbWlsYXIgZmFzaGlvbiB0byB3ZSBkbyBmb3IgcmVs YXRpdmUgaHVtaWRpdHkgdnMKPiA+Pj4gdGhlIHByb3Bvc2VkIGFic29sdXRlIGh1bWlkaXR5Lgo+ ID4+PiAKPiA+Pj4gaW5fcG93ZXJyZWFjdGl2ZUFfc2NhbGUKPiA+Pj4gaW5fcG93ZXJhY3RpdmNl QV9zY2FsZQo+ID4+PiAob3IgaW5fcG93ZXJyZWFsQV9zY2FsZSB0byBtYXRjaCB3aXRoIHdoYXQg SSBnb3QgdGF1Z2h0IHllYXJzIGFnbz8pCj4gPj4+IAo+ID4+PiBJIHByZXN1bWUgd2Uga2VlcCBp bl9wb3dlckFfc2NhbGUgZXRjIGZvciB0aGUgYXBwYXJlbnQgcG93ZXIgYW5kCj4gPj4+IG1vZGlm eSBhbnkgZG9jcyB0byBtYWtlIHRoYXQgY2xlYXIuCj4gPj4+ICAgCj4gPj4+PiDigJQKPiA+Pj4+ IEFWQVJHQUlOCS0JaW5fcG93ZXJfYXFfZ2FpbgkJCQkvKiByZWFjdGl2ZSBwb3dlciAqLwo+ID4+ Pj4g4oCUCj4gPj4+PiBOb3cgaGVyZSBpdCBiZWNvbWVzIG1vcmUgY29tcGxpY2F0ZWQuIE5vdCBz dXJlIGhvdyB0aGlzIGdldHMgaGFuZGxlZC4gCj4gPj4+PiBBRldBVFRPUwktCWluX3Bvd2VyX2Ff YWN0aXZlL2Z1bmRhbWVudGFsL29mZnNldCAgICAKPiA+Pj4gWWVhaCwgc29tZSBvZiB0aGVzZSBh cmUgZ2V0dGluZyBvZGQuCj4gPj4+IElmIEkgcmVhZCB0aGlzIGNvcnJlY3RseSB0aGlzIGlzIHRo ZSBhY3RpdmUgcG93ZXIgZXN0aW1hdGUgYmFzZWQgb24gb25seQo+ID4+PiB0aGUgZnVuZGFtZW50 YWwgZnJlcXVlbmN5IC0gc28gbm8gaGFybW9uaWNzPwo+ID4+PiAKPiA+Pj4gSG1tLiAgVGhpcyB0 aGVuIGJlY29tZXMgYSBzZXBhcmF0ZSBjaGFubmVsIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVz Cj4gPj4+IHNwZWNpZnlpbmcgaXQgaXMgb25seSB0aGUgZnVuZGFtZW50YWwuICBUaGlzIGZlZWxz IGEgYml0IGxpa2UgYSBmaWx0ZXIKPiA+Pj4gYmUgaXQgYW4gdW51c3VhbCBvbmU/ICBNaWdodCBq dXN0IGJlIG5lY2Vzc2FyeSB0byBhZGQgYSBfZnVuZGFtZW50YWxfb25seQo+ID4+PiBlbGVtZW50 IG9uIHRoZSBlbmQgKHdvdWxkIGJlIGluZm9fbWFzayBpZiB0aGlzIGlzIGNvbW1vbiBlbm91Z2gg dG8KPiA+Pj4ganVzdGlmeSB0aGF0IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBleHRlbmRlZCBtZXRo b2RzIHRvIGRlZmluZSBpdC4pLgo+ID4+PiAKPiA+Pj4gICAKPiA+Pj4+IOKAlAo+ID4+Pj4gQVdB VFRIUgktCWluX2VuZXJneV9haV9hY2N1bXVsYXRpb24gICAgCj4gPj4+IEdyZWF0LCBqdXN0IHdo ZW4gSSB0aG91Z2h0IHdlIGhhZCBnb25lIGZhciBlbm91Z2ggdGhleSBkZWZpbmUgcmVhY3RpdmUK PiA+Pj4gZW5lcmd5IHdoaWNoIGlzIHByZXN1bWFibHkgcm91Z2hseSB0aGUgc2FtZSBhcyByZWFj dGl2ZXBvd2VyICogdGltZT8KPiA+Pj4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdHlwZXMgZm9yIHRo YXQgYXMgd2VsbC4KPiA+Pj4gaW5fZW5lcmd5cmVhY3RpdmVBXyoKPiA+Pj4gaW5fZW5lcmd5YWN0 aXZlQV8qCj4gPj4+ICAgCj4gPj4+PiDigJQKPiA+Pj4+IEFWQVJIUgkJLQlpbl9lbmVyZ3lfYXFf YWNjdW11bGF0aW9uCj4gPj4+PiDigJQKPiA+Pj4+IElQRUFLCQktCWluX2N1cnJlbnRfcGVhayAg ICAKPiA+Pj4gVGhhdCBvbmUgaXMgZWFzeSBhcyB3ZSBoYXZlIGFuIGluZm9fbWFzayBlbGVtZW50 IGZvciBwZWFrIGFuZCBvbmUKPiA+Pj4gZm9yIHBlYWtfc2NhbGUgdGhhdCBoYXMgYWx3YXlzIGJl ZW4gYSBiaXQgb2RkIGJ1dCB3YXMgbmVlZGVkIHNvbWV3aGVyZS4KPiA+Pj4gICAKPiA+Pj4+IOKA lAo+ID4+Pj4gCj4gPj4+PiBJ4oCZbGwgbGVhdmUgaXQgdGhlcmUsIGJlY2F1c2UgdGhlcmUgYXJl IHNvbWUgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHJlZ2lzdGVyIG5hbWluZyBpc3N1ZXMuICAgIAo+ ID4+PiBTb21ldGhpbmcgdG8gbG9vayBmb3J3YXJkIHRvLiAgR2FoLCBJIGFsd2F5cyBoYXRlZCBw b3dlciBlbmdpbmVlcmluZwo+ID4+PiB0aG91Z2ggSSB0YXVnaHQgaXQgdmVyeSBicmllZmx5IChJ IHJlYWxseSBwaXR5IHRob3NlIHN0dWRlbnRzIDooCj4gPj4+IAo+ID4+PiBKb25hdGhhbgo+ID4+ PiAgIAo+ID4+Pj4gCj4gPj4+PiBSZWdhcmRzLAo+ID4+Pj4gSm9obgo+ID4+Pj4gCj4gPj4+PiAK PiA+Pj4+IAo+ID4+Pj4gCj4gPj4+PiAgIAo+ID4+Pj4+IE9uIE1hciAxMCwgMjAxOCwgYXQgNzox MCBBTSwgSm9uYXRoYW4gQ2FtZXJvbiA8amljMjNAa2VybmVsLm9yZz4gd3JvdGU6Cj4gPj4+Pj4g Cj4gPj4+Pj4gT24gVGh1LCA4IE1hciAyMDE4IDIxOjM3OjMzIC0wMzAwCj4gPj4+Pj4gUm9kcmln byBTaXF1ZWlyYSA8cm9kcmlnb3NpcXVlaXJhbWVsb0BnbWFpbC5jb20+IHdyb3RlOgo+ID4+Pj4+ ICAgCj4gPj4+Pj4+IE9uIDAzLzA3LCBKb25hdGhhbiBDYW1lcm9uIHdyb3RlOiAgICAgIAo+ID4+ Pj4+Pj4gT24gVHVlLCA2IE1hciAyMDE4IDIxOjQzOjQ3IC0wMzAwCj4gPj4+Pj4+PiBSb2RyaWdv IFNpcXVlaXJhIDxyb2RyaWdvc2lxdWVpcmFtZWxvQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPj4+Pj4+ PiAgIAo+ID4+Pj4+Pj4+IFRoZSBtYWNybyBJSU9fREVWX0FUVFJfQ0hfT0ZGIGlzIGEgd3JhcHBl ciBmb3IgSUlPX0RFVklDRV9BVFRSLCB3aXRoIGEKPiA+Pj4+Pj4+PiB0aW55IGNoYW5nZSBpbiB0 aGUgbmFtZSBkZWZpbml0aW9uLiBUaGlzIGV4dHJhIG1hY3JvIGRvZXMgbm90IGltcHJvdmUKPiA+ Pj4+Pj4+PiB0aGUgcmVhZGFiaWxpdHkgYW5kIGFsc28gY3JlYXRlcyBzb21lIGNoZWNrcGF0Y2gg ZXJyb3JzLgo+ID4+Pj4+Pj4+IAo+ID4+Pj4+Pj4+IFRoaXMgcGF0Y2ggZml4ZXMgdGhlIGNoZWNr cGF0Y2gucGwgZXJyb3JzOgo+ID4+Pj4+Pj4+IAo+ID4+Pj4+Pj4+IHN0YWdpbmcvaWlvL21ldGVy L2FkZTc3NTMuYzozOTE6IEVSUk9SOiBVc2UgNCBkaWdpdCBvY3RhbCAoMDc3Nykgbm90Cj4gPj4+ Pj4+Pj4gZGVjaW1hbCBwZXJtaXNzaW9ucwo+ID4+Pj4+Pj4+IHN0YWdpbmcvaWlvL21ldGVyL2Fk ZTc3NTMuYzozOTU6IEVSUk9SOiBVc2UgNCBkaWdpdCBvY3RhbCAoMDc3Nykgbm90Cj4gPj4+Pj4+ Pj4gZGVjaW1hbCBwZXJtaXNzaW9ucwo+ID4+Pj4+Pj4+IHN0YWdpbmcvaWlvL21ldGVyL2FkZTc3 NTkuYzozMzE6IEVSUk9SOiBVc2UgNCBkaWdpdCBvY3RhbCAoMDc3Nykgbm90Cj4gPj4+Pj4+Pj4g ZGVjaW1hbCBwZXJtaXNzaW9ucwo+ID4+Pj4+Pj4+IHN0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTku YzozMzU6IEVSUk9SOiBVc2UgNCBkaWdpdCBvY3RhbCAoMDc3Nykgbm90Cj4gPj4+Pj4+Pj4gZGVj aW1hbCBwZXJtaXNzaW9ucwo+ID4+Pj4+Pj4+IAo+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFJv ZHJpZ28gU2lxdWVpcmEgPHJvZHJpZ29zaXF1ZWlyYW1lbG9AZ21haWwuY29tPiAgICAgICAgCj4g Pj4+Pj4+PiAKPiA+Pj4+Pj4+IEhtbS4gSSB3b25kZXJlZCBhIGJpdCBhYm91dCB0aGlzIG9uZS4g SXQncyBhIGNvcnJlY3QgcGF0Y2ggaW4gb2YKPiA+Pj4+Pj4+IGl0c2VsZiBidXQgdGhlIGludGVy ZmFjZSBpbiBxdWVzdGlvbiBkb2Vzbid0IGV2ZW4gdmFndWVseSBjb25mb3JtCj4gPj4+Pj4+PiB0 byBhbnkgb2YgZGVmaW5lZCBJSU8gQUJJLiAgQW55aG93LCBpdCdzIHN0aWxsIGFuZCBpbXByb3Zl bWVudCBzbwo+ID4+Pj4+Pj4gSSdsbCB0YWtlIGl0LiAgICAgICAgCj4gPj4+Pj4+IAo+ID4+Pj4+ PiBJIGFtIG5vdCBzdXJlIGlmIEkgdW5kZXJzdG9vZCB0aGUgY29tbWVudCBhYm91dCB0aGUgQUJJ LiBUaGUgbWV0ZXIKPiA+Pj4+Pj4gaW50ZXJmYWNlIGlzIHdyb25nIGJlY2F1c2UgaXQgdXNlcyB0 aGluZ3MgbGlrZSBJSU9fREVWSUNFX0FUVFI/IEl0Cj4gPj4+Pj4+IHNob3VsZCB1c2UgaWlvX2lu Zm8gdG9nZXRoZXIgd2l0aCAqd3JpdGVfcmF3IGFuZCAqcmVhZF9yYXcuIFJpZ2h0PyBJcyBpdAo+ ID4+Pj4+PiB0aGUgQUJJIHByb2JsZW0gdGhhdCB5b3UgcmVmZXI/ICAgICAgCj4gPj4+Pj4gVGhl IEFCSSBpcyBhYm91dCB0aGUgdXNlcnNwYWNlIGludGVyZmFjZSBvZiBJSU8uICBJdCBpcyBkZWZp bmVkCj4gPj4+Pj4gaW4gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtaWlvKgo+ ID4+Pj4+IFNvIHRoaXMgZG9jdW1lbnRzIHRoZSBuYW1pbmcgb2Ygc3lzZnMgYXR0cmlidXRlcyBh bmQgKG1vcmUgb3IgbGVzcykKPiA+Pj4+PiBkZXNjcmliZXMgYSBjb25zaXN0ZW50IGludGVyZmFj ZSB0byB1c2Vyc3BhY2UgYWNyb3NzIGxvdHMgb2YgZGlmZmVyZW50Cj4gPj4+Pj4gdHlwZXMgb2Yg ZGV2aWNlcy4KPiA+Pj4+PiAKPiA+Pj4+PiBBIGxvdCBvZiB0aGVzZSBvbGRlciBkcml2ZXJzIGlu IHN0YWdpbmcgaW52b2x2ZSBhIGdvb2QgZGVhbCBvZiBBQkkgdGhhdAo+ID4+Pj4+IHdhcyBub3Qg cmV2aWV3ZWQgb3IgZGlzY3Vzc2VkLiAgVGhhdCBpcyBvbmUgb2YgdGhlIGJpZ2dlc3QgcmVhc29u cyB3ZQo+ID4+Pj4+IGRpZG4ndCB0YWtlIHRoZW0gb3V0IG9mIHN0YWdpbmcgaW4gdGhlIGZpcnN0 IHBsYWNlLgo+ID4+Pj4+IAo+ID4+Pj4+IEluIG9yZGVyIGZvciBnZW5lcmljIHVzZXJzcGFjZSBw cm9ncmFtcyB0byBoYXZlIGFueSBpZGVhIHdoYXQgdG8gZG8KPiA+Pj4+PiB3aXRoIHRoZXNlIGRl dmljZXMgdGhpcyBhbGwgbmVlZHMgdG8gYmUgZml4ZWQuCj4gPj4+Pj4gCj4gPj4+Pj4gVGhlcmUg bWF5IHdlbGwgYmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBleHBhbmQgdGhlIGV4aXN0aW5nIEFC SSB0bwo+ID4+Pj4+IGNvdmVyIG5ldyB0aGluZ3MuICAgVGhhdCdzIGZpbmUsIGJ1dCBpdCBoYXMg dG8gYmUgZG9uZSB3aXRoIGZ1bGwKPiA+Pj4+PiByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGRvY3Vt ZW50YXRpb24gcGF0Y2hlcy4KPiA+Pj4+PiAKPiA+Pj4+PiBJbmNpZGVudGFsbHkgaWYgeW91IHdh bnQgYW4gZWFzeSBkcml2ZXIgdG8gd29yayBvbiBtb3Zpbmcgb3V0IG9mIHN0YWdpbmcKPiA+Pj4+ PiB0aGVuIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGNvbXBhcmUgd2hhdCBpdCBzaG93cyB0byB1 c2Vyc3BhY2Ugd2l0aCB0aGVzZQo+ID4+Pj4+IGRvY3MuICBJZiBpdCdzIHRvdGFsbHkgZGlmZmVy ZW50IHRoZW4geW91IGhhdmUgYSBiaWcgam9iIG9uIHlvdXIgaGFuZHMKPiA+Pj4+PiBhcyBvZnRl biBBQkkgY2FuIHRha2UgYSBsb3Qgb2YgZGlzY3Vzc2lvbiBhbmQgYSBsb25nIHRpbWUgdG8gZXN0 YWJsaXNoCj4gPj4+Pj4gYSBjb25zZW5zdXMuCj4gPj4+Pj4gCj4gPj4+Pj4gSm9uYXRoYW4KPiA+ Pj4+PiAKPiA+Pj4+PiAgIAo+ID4+Pj4+PiAKPiA+Pj4+Pj4gVGhhbmtzIDopCj4gPj4+Pj4+ICAg Cj4gPj4+Pj4+PiBBcHBsaWVkIHRvIHRoZSB0b2dyZWcgYnJhbmNoIG9mIGlpby5naXQgYW5kIHB1 c2hlZCBvdXQgYXMgdGVzdGluZwo+ID4+Pj4+Pj4gZm9yIHRoZSBhdXRvYnVpbGRlcnMgdG8gcGxh eSB3aXRoIGl0Lgo+ID4+Pj4+Pj4gCj4gPj4+Pj4+PiBJIGFsc28gYWRkZWQgdGhlIHJlbW92YWwg b2YgdGhlIGhlYWRlciBkZWZpbmUgd2hpY2ggaXMgbm8KPiA+Pj4+Pj4+IGxvbmdlciB1c2VkLgo+ ID4+Pj4+Pj4gCj4gPj4+Pj4+PiBQbGVhc2Ugbm90ZSwgZm9sbG93aW5nIGRpc2N1c3Npb25zIHdp dGggTWljaGFlbCwgSSBhbSBnb2luZyB0byBzZW5kCj4gPj4+Pj4+PiBhbiBlbWFpbCBhbm5vdW5j aW5nIGFuIGludGVudCB0byBkcm9wIHRoZXNlIG1ldGVyIGRyaXZlcnMgbmV4dAo+ID4+Pj4+Pj4g Y3ljbGUgdW5sZXNzIHNvbWVvbmUgY2FuIHByb3ZpZGUgdGVzdGluZyBmb3IgYW55IGF0dGVtcHQg dG8KPiA+Pj4+Pj4+IG1vdmUgdGhlbSBvdXQgb2Ygc3RhZ2luZy4gIEknbSBzdGlsbCB0YWtpbmcg cGF0Y2hlcyBvbiB0aGUgYmFzaXMKPiA+Pj4+Pj4+IHRoYXQgJ21pZ2h0JyBoYXBwZW4gLSBidXQg SSB3b3VsZG4ndCBmb2N1cyBvbiB0aGVzZSB1bnRpbCB3ZQo+ID4+Pj4+Pj4gaGF2ZSBzb21lIGNl cnRhaW50eSBvbiB3aGV0aGVyIHRoZXkgd2lsbCBiZSBhcm91bmQgbG9uZyB0ZXJtIQo+ID4+Pj4+ Pj4gCj4gPj4+Pj4+PiBKb25hdGhhbgo+ID4+Pj4+Pj4gICAKPiA+Pj4+Pj4+PiAtLS0KPiA+Pj4+ Pj4+PiBkcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTMuYyB8IDE4ICsrKysrKysrKyst LS0tLS0tLQo+ID4+Pj4+Pj4+IGRyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5jIHwg MTggKysrKysrKysrKy0tLS0tLS0tCj4gPj4+Pj4+Pj4gMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNl cnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKPiA+Pj4+Pj4+PiAKPiA+Pj4+Pj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmMgYi9kcml2ZXJzL3N0YWdp bmcvaWlvL21ldGVyL2FkZTc3NTMuYwo+ID4+Pj4+Pj4+IGluZGV4IGM0NGViNTc3ZGMzNS4uMjc1 ZThkZmZmODM2IDEwMDY0NAo+ID4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0 ZXIvYWRlNzc1My5jCj4gPj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9h ZGU3NzUzLmMKPiA+Pj4+Pj4+PiBAQCAtMzg4LDE0ICszODgsMTYgQEAgc3RhdGljIElJT19ERVZf QVRUUl9WUEVSSU9EKDA0NDQsCj4gPj4+Pj4+Pj4gCQlhZGU3NzUzX3JlYWRfMTZiaXQsCj4gPj4+ Pj4+Pj4gCQlOVUxMLAo+ID4+Pj4+Pj4+IAkJQURFNzc1M19QRVJJT0QpOwo+ID4+Pj4+Pj4+IC1z dGF0aWMgSUlPX0RFVl9BVFRSX0NIX09GRigxLCAwNjQ0LAo+ID4+Pj4+Pj4+IC0JCWFkZTc3NTNf cmVhZF84Yml0LAo+ID4+Pj4+Pj4+IC0JCWFkZTc3NTNfd3JpdGVfOGJpdCwKPiA+Pj4+Pj4+PiAt CQlBREU3NzUzX0NIMU9TKTsKPiA+Pj4+Pj4+PiAtc3RhdGljIElJT19ERVZfQVRUUl9DSF9PRkYo MiwgMDY0NCwKPiA+Pj4+Pj4+PiAtCQlhZGU3NzUzX3JlYWRfOGJpdCwKPiA+Pj4+Pj4+PiAtCQlh ZGU3NzUzX3dyaXRlXzhiaXQsCj4gPj4+Pj4+Pj4gLQkJQURFNzc1M19DSDJPUyk7Cj4gPj4+Pj4+ Pj4gKwo+ID4+Pj4+Pj4+ICtzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGNob2ZmXzEsIDA2NDQsCj4g Pj4+Pj4+Pj4gKwkJCWFkZTc3NTNfcmVhZF84Yml0LAo+ID4+Pj4+Pj4+ICsJCQlhZGU3NzUzX3dy aXRlXzhiaXQsCj4gPj4+Pj4+Pj4gKwkJCUFERTc3NTNfQ0gxT1MpOwo+ID4+Pj4+Pj4+ICsKPiA+ Pj4+Pj4+PiArc3RhdGljIElJT19ERVZJQ0VfQVRUUihjaG9mZl8yLCAwNjQ0LAo+ID4+Pj4+Pj4+ ICsJCQlhZGU3NzUzX3JlYWRfOGJpdCwKPiA+Pj4+Pj4+PiArCQkJYWRlNzc1M193cml0ZV84Yml0 LAo+ID4+Pj4+Pj4+ICsJCQlBREU3NzUzX0NIMk9TKTsKPiA+Pj4+Pj4+PiAKPiA+Pj4+Pj4+PiBz dGF0aWMgaW50IGFkZTc3NTNfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxl KQo+ID4+Pj4+Pj4+IHsKPiA+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lp by9tZXRlci9hZGU3NzU5LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTkuYwo+ ID4+Pj4+Pj4+IGluZGV4IDFkZWNiMmI4YWZhYi4uYzA3OGI3NzBmYTUzIDEwMDY0NAo+ID4+Pj4+ Pj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5jCj4gPj4+Pj4+Pj4g KysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU5LmMKPiA+Pj4+Pj4+PiBAQCAt MzI4LDE0ICszMjgsMTYgQEAgc3RhdGljIElJT19ERVZfQVRUUl9BQ1RJVkVfUE9XRVJfR0FJTigw NjQ0LAo+ID4+Pj4+Pj4+IAkJYWRlNzc1OV9yZWFkXzE2Yml0LAo+ID4+Pj4+Pj4+IAkJYWRlNzc1 OV93cml0ZV8xNmJpdCwKPiA+Pj4+Pj4+PiAJCUFERTc3NTlfQVBHQUlOKTsKPiA+Pj4+Pj4+PiAt c3RhdGljIElJT19ERVZfQVRUUl9DSF9PRkYoMSwgMDY0NCwKPiA+Pj4+Pj4+PiAtCQlhZGU3NzU5 X3JlYWRfOGJpdCwKPiA+Pj4+Pj4+PiAtCQlhZGU3NzU5X3dyaXRlXzhiaXQsCj4gPj4+Pj4+Pj4g LQkJQURFNzc1OV9DSDFPUyk7Cj4gPj4+Pj4+Pj4gLXN0YXRpYyBJSU9fREVWX0FUVFJfQ0hfT0ZG KDIsIDA2NDQsCj4gPj4+Pj4+Pj4gLQkJYWRlNzc1OV9yZWFkXzhiaXQsCj4gPj4+Pj4+Pj4gLQkJ YWRlNzc1OV93cml0ZV84Yml0LAo+ID4+Pj4+Pj4+IC0JCUFERTc3NTlfQ0gyT1MpOwo+ID4+Pj4+ Pj4+ICsKPiA+Pj4+Pj4+PiArc3RhdGljIElJT19ERVZJQ0VfQVRUUihjaG9mZl8xLCAwNjQ0LAo+ ID4+Pj4+Pj4+ICsJCQlhZGU3NzU5X3JlYWRfOGJpdCwKPiA+Pj4+Pj4+PiArCQkJYWRlNzc1OV93 cml0ZV84Yml0LAo+ID4+Pj4+Pj4+ICsJCQlBREU3NzU5X0NIMU9TKTsKPiA+Pj4+Pj4+PiArCj4g Pj4+Pj4+Pj4gK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoY2hvZmZfMiwgMDY0NCwKPiA+Pj4+Pj4+ PiArCQkJYWRlNzc1OV9yZWFkXzhiaXQsCj4gPj4+Pj4+Pj4gKwkJCWFkZTc3NTlfd3JpdGVfOGJp dCwKPiA+Pj4+Pj4+PiArCQkJQURFNzc1OV9DSDJPUyk7Cj4gPj4+Pj4+Pj4gCj4gPj4+Pj4+Pj4g c3RhdGljIGludCBhZGU3NzU5X3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJs ZSkKPiA+Pj4+Pj4+PiB7ICAgICAgICAKPiA+Pj4+Pj4+ICAgCj4gPj4+Pj4+IC0tCj4gPj4+Pj4+ IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli ZSBsaW51eC1paW8iIGluCj4gPj4+Pj4+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv bW9Admdlci5rZXJuZWwub3JnCj4gPj4+Pj4+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6 Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbCAgICAgIAo+ID4+Pj4+IAo+ID4+ Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPj4+ Pj4gZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPj4+Pj4gZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9y Zwo+ID4+Pj4+IGh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9qZWN0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbCAgICAgIAo+ID4+Pj4gICAKPiA+Pj4gICAKPiA+PiAg IAo+ID4gICAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRldmVsIG1haWxpbmcgbGlzdApkZXZlbEBsaW51eGRyaXZlcnByb2plY3Qub3JnCmh0dHA6 Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaXZl cmRldi1kZXZlbAo=