diff mbox

dmaengine: fsldma: Replace DMA_IN/OUT by FSL_DMA_IN/OUT

Message ID 20171225073912.30773-1-wen.he_1@nxp.com (mailing list archive)
State Superseded
Headers show

Commit Message

Wen He Dec. 25, 2017, 7:39 a.m. UTC
using FSL_DMA_IN/OUT instead DMA_IN/OUT for implement
a dma drivers standard macro call interface.

Signed-off-by: Wen He <wen.he_1@nxp.com>
---
 drivers/dma/fsldma.c |   16 ++++++++--------
 drivers/dma/fsldma.h |   38 ++++++++++++++++++++++++++++++++------
 2 files changed, 40 insertions(+), 14 deletions(-)

Comments

kernel test robot Dec. 25, 2017, 6:20 p.m. UTC | #1
Hi Wen,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.15-rc5 next-20171222]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Wen-He/dmaengine-fsldma-Replace-DMA_IN-OUT-by-FSL_DMA_IN-OUT/20171226-000718
config: powerpc-ge_imp3a_defconfig (attached as .config)
compiler: powerpc-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=powerpc 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/dma/fsldma.c:41:0:
>> drivers/dma/fsldma.h:229:13: error: conflicting types for 'ioread32'
    static void ioread32(const u32 __iomem *addr)
                ^~~~~~~~
   In file included from arch/powerpc/include/asm/io.h:36:0,
                    from include/linux/io.h:25,
                    from include/linux/irq.h:25,
                    from arch/powerpc/include/asm/hardirq.h:6,
                    from include/linux/hardirq.h:9,
                    from include/linux/interrupt.h:13,
                    from include/linux/pci.h:32,
                    from drivers/dma/fsldma.c:29:
   include/asm-generic/iomap.h:32:21: note: previous declaration of 'ioread32' was here
    extern unsigned int ioread32(void __iomem *);
                        ^~~~~~~~
   In file included from drivers/dma/fsldma.c:41:0:
   drivers/dma/fsldma.h: In function 'ioread32':
>> drivers/dma/fsldma.h:231:9: warning: 'return' with a value, in function returning void
     return in_le32(addr);
            ^~~~~~~~~~~~~
   drivers/dma/fsldma.h:229:13: note: declared here
    static void ioread32(const u32 __iomem *addr)
                ^~~~~~~~
   drivers/dma/fsldma.h: At top level:
>> drivers/dma/fsldma.h:234:13: error: conflicting types for 'iowrite32'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   In file included from arch/powerpc/include/asm/io.h:36:0,
                    from include/linux/io.h:25,
                    from include/linux/irq.h:25,
                    from arch/powerpc/include/asm/hardirq.h:6,
                    from include/linux/hardirq.h:9,
                    from include/linux/interrupt.h:13,
                    from include/linux/pci.h:32,
                    from drivers/dma/fsldma.c:29:
   include/asm-generic/iomap.h:42:13: note: previous declaration of 'iowrite32' was here
    extern void iowrite32(u32, void __iomem *);
                ^~~~~~~~~
   In file included from drivers/dma/fsldma.c:41:0:
>> drivers/dma/fsldma.h:239:13: error: conflicting types for 'ioread32be'
    static void ioread32be(const u32 __iomem *addr)
                ^~~~~~~~~~
   In file included from arch/powerpc/include/asm/io.h:36:0,
                    from include/linux/io.h:25,
                    from include/linux/irq.h:25,
                    from arch/powerpc/include/asm/hardirq.h:6,
                    from include/linux/hardirq.h:9,
                    from include/linux/interrupt.h:13,
                    from include/linux/pci.h:32,
                    from drivers/dma/fsldma.c:29:
   include/asm-generic/iomap.h:33:21: note: previous declaration of 'ioread32be' was here
    extern unsigned int ioread32be(void __iomem *);
                        ^~~~~~~~~~
   In file included from drivers/dma/fsldma.c:41:0:
   drivers/dma/fsldma.h: In function 'ioread32be':
   drivers/dma/fsldma.h:241:9: warning: 'return' with a value, in function returning void
     return in_be32(addr);
            ^~~~~~~~~~~~~
   drivers/dma/fsldma.h:239:13: note: declared here
    static void ioread32be(const u32 __iomem *addr)
                ^~~~~~~~~~
   drivers/dma/fsldma.h: At top level:
>> drivers/dma/fsldma.h:244:13: error: conflicting types for 'iowrite32be'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
   In file included from arch/powerpc/include/asm/io.h:36:0,
                    from include/linux/io.h:25,
                    from include/linux/irq.h:25,
                    from arch/powerpc/include/asm/hardirq.h:6,
                    from include/linux/hardirq.h:9,
                    from include/linux/interrupt.h:13,
                    from include/linux/pci.h:32,
                    from drivers/dma/fsldma.c:29:
   include/asm-generic/iomap.h:43:13: note: previous declaration of 'iowrite32be' was here
    extern void iowrite32be(u32, void __iomem *);
                ^~~~~~~~~~~
   In file included from drivers/dma/fsldma.c:41:0:
   drivers/dma/fsldma.c: In function 'set_sr':
>> drivers/dma/fsldma.c:56:37: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->sr, val, 32);
                                        ^
   drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                          ^~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
>> drivers/dma/fsldma.c:56:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->sr, val, 32);
                       ^
   drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                               ^~~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
>> drivers/dma/fsldma.c:56:37: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->sr, val, 32);
                                        ^
   drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
        ^~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
>> drivers/dma/fsldma.c:56:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->sr, val, 32);
                       ^
   drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
             ^~~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   drivers/dma/fsldma.c: In function 'get_sr':
>> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be
      (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?  \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       ioread##width##be(addr) : ioread##width(addr))
       ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
>> drivers/dma/fsldma.c:61:9: note: in expansion of macro 'FSL_DMA_IN'
     return FSL_DMA_IN(chan, &chan->regs->sr, 32);
            ^~~~~~~~~~
   drivers/dma/fsldma.c: In function 'set_mr':
   drivers/dma/fsldma.c:66:37: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->mr, val, 32);
                                        ^
   drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                          ^~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
   drivers/dma/fsldma.c:66:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->mr, val, 32);
                       ^
   drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                               ^~~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
   drivers/dma/fsldma.c:66:37: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->mr, val, 32);
                                        ^
   drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
        ^~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   drivers/dma/fsldma.c:66:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->mr, val, 32);
                       ^
   drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
             ^~~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   drivers/dma/fsldma.c: In function 'get_mr':
>> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be
      (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?  \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       ioread##width##be(addr) : ioread##width(addr))
       ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
   drivers/dma/fsldma.c:71:9: note: in expansion of macro 'FSL_DMA_IN'
     return FSL_DMA_IN(chan, &chan->regs->mr, 32);
            ^~~~~~~~~~
   drivers/dma/fsldma.c: In function 'set_cdar':
>> drivers/dma/fsldma.h:256:4: error: implicit declaration of function 'iowrite64be'; did you mean 'iowrite32be'? [-Werror=implicit-function-declaration]
       iowrite##width##be(val, addr) : iowrite##width \
       ^
>> drivers/dma/fsldma.c:76:2: note: in expansion of macro 'FSL_DMA_OUT'
     FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64);
     ^~~~~~~~~~~
>> drivers/dma/fsldma.h:256:36: error: implicit declaration of function 'iowrite64'; did you mean 'iowrite32'? [-Werror=implicit-function-declaration]
       iowrite##width##be(val, addr) : iowrite##width \
                                       ^
>> drivers/dma/fsldma.c:76:2: note: in expansion of macro 'FSL_DMA_OUT'
     FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64);
     ^~~~~~~~~~~
   drivers/dma/fsldma.c: In function 'get_cdar':
>> drivers/dma/fsldma.h:252:4: error: implicit declaration of function 'ioread64be'; did you mean 'ioread32be'? [-Werror=implicit-function-declaration]
       ioread##width##be(addr) : ioread##width(addr))
       ^
   drivers/dma/fsldma.c:81:9: note: in expansion of macro 'FSL_DMA_IN'
     return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN;
            ^~~~~~~~~~
>> drivers/dma/fsldma.h:252:30: error: implicit declaration of function 'ioread64'; did you mean 'ioread32'? [-Werror=implicit-function-declaration]
       ioread##width##be(addr) : ioread##width(addr))
                                 ^
   drivers/dma/fsldma.c:81:9: note: in expansion of macro 'FSL_DMA_IN'
     return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN;
            ^~~~~~~~~~
   drivers/dma/fsldma.c: In function 'set_bcr':
   drivers/dma/fsldma.c:86:38: warning: passing argument 1 of 'iowrite32be' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32);
                                         ^
   drivers/dma/fsldma.h:256:23: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                          ^~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
   drivers/dma/fsldma.c:86:20: warning: passing argument 2 of 'iowrite32be' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32);
                       ^
   drivers/dma/fsldma.h:256:28: note: in definition of macro 'FSL_DMA_OUT'
       iowrite##width##be(val, addr) : iowrite##width \
                               ^~~~
   drivers/dma/fsldma.h:244:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32be(u32 __iomem *addr, u32 val)
                ^~~~~~~~~~~
   drivers/dma/fsldma.c:86:38: warning: passing argument 1 of 'iowrite32' makes pointer from integer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32);
                                         ^
   drivers/dma/fsldma.h:257:5: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
        ^~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 * {aka unsigned int *}' but argument is of type 'u32 {aka unsigned int}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   drivers/dma/fsldma.c:86:20: warning: passing argument 2 of 'iowrite32' makes integer from pointer without a cast [-Wint-conversion]
     FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32);
                       ^
   drivers/dma/fsldma.h:257:10: note: in definition of macro 'FSL_DMA_OUT'
       (val, addr))
             ^~~~
   drivers/dma/fsldma.h:234:13: note: expected 'u32 {aka unsigned int}' but argument is of type 'u32 * {aka unsigned int *}'
    static void iowrite32(u32 __iomem *addr, u32 val)
                ^~~~~~~~~
   drivers/dma/fsldma.c: In function 'get_bcr':
>> drivers/dma/fsldma.h:252:28: error: void value not ignored as it ought to be
      (((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?  \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       ioread##width##be(addr) : ioread##width(addr))
       ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
   drivers/dma/fsldma.c:91:9: note: in expansion of macro 'FSL_DMA_IN'
     return FSL_DMA_IN(chan, &chan->regs->bcr, 32);
            ^~~~~~~~~~
   drivers/dma/fsldma.c: In function 'get_mr':
>> drivers/dma/fsldma.c:72:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
   drivers/dma/fsldma.c: In function 'get_sr':
   drivers/dma/fsldma.c:62:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
   drivers/dma/fsldma.c: In function 'get_bcr':
   drivers/dma/fsldma.c:92:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
   In file included from drivers/dma/fsldma.c:41:0:
   At top level:
   drivers/dma/fsldma.h:220:13: warning: 'out_le64' defined but not used [-Wunused-function]
    static void out_le64(u64 __iomem *addr, u64 val)
                ^~~~~~~~
   drivers/dma/fsldma.h:214:12: warning: 'in_le64' defined but not used [-Wunused-function]
    static u64 in_le64(const u64 __iomem *addr)
               ^~~~~~~
   drivers/dma/fsldma.h:207:13: warning: 'out_be64' defined but not used [-Wunused-function]
    static void out_be64(u64 __iomem *addr, u64 val)
                ^~~~~~~~
   drivers/dma/fsldma.h:201:12: warning: 'in_be64' defined but not used [-Wunused-function]
    static u64 in_be64(const u64 __iomem *addr)
               ^~~~~~~
   cc1: some warnings being treated as errors

vim +/ioread32 +229 drivers/dma/fsldma.h

   227	
   228	#ifdef CONFIG_PPC
 > 229	static void ioread32(const u32 __iomem *addr)
   230	{
 > 231		return in_le32(addr);
   232	}
   233	
 > 234	static void iowrite32(u32 __iomem *addr, u32 val)
   235	{
   236		out_le32(addr, val);
   237	}
   238	
 > 239	static void ioread32be(const u32 __iomem *addr)
   240	{
 > 241		return in_be32(addr);
   242	}
   243	
 > 244	static void iowrite32be(u32 __iomem *addr, u32 val)
   245	{
   246		out_be32(addr, val);
   247	}
   248	#endif
   249	
   250	#define FSL_DMA_IN(fsl_dma, addr, width)				\
   251			(((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?		\
 > 252				ioread##width##be(addr) : ioread##width(addr))
   253	
   254	#define FSL_DMA_OUT(fsl_dma, addr, val, width)				\
   255			(((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?		\
 > 256				iowrite##width##be(val, addr) : iowrite##width	\
 > 257			 (val, addr))
   258	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Wen He Dec. 26, 2017, 4:59 a.m. UTC | #2
T2theSwgd2lsbCBiZSBGaXggaW4gbmV4dCB2ZXJzaW9uLg0KDQpUaGFua3MgYSBsb3QuDQoNClJl
Z2FyZHMsDQpXZW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBrYnVp
bGQgdGVzdCByb2JvdCBbbWFpbHRvOmxrcEBpbnRlbC5jb21dDQo+IFNlbnQ6IDIwMTfE6jEy1MIy
NsjVIDI6MjANCj4gVG86IFdlbiBIZSA8d2VuLmhlXzFAbnhwLmNvbT4NCj4gQ2M6IGtidWlsZC1h
bGxAMDEub3JnOyB2aW5vZC5rb3VsQGludGVsLmNvbTsgTGVvIExpIDxsZW95YW5nLmxpQG54cC5j
b20+Ow0KPiBkbWFlbmdpbmVAdmdlci5rZXJuZWwub3JnOyBKaWFmZWkgUGFuIDxqaWFmZWkucGFu
QG54cC5jb20+OyBKaWFoZW5nIEZhbg0KPiA8amlhaGVuZy5mYW5AbnhwLmNvbT47IFdlbiBIZSA8
d2VuLmhlXzFAbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSF0gZG1hZW5naW5lOiBmc2xk
bWE6IFJlcGxhY2UgRE1BX0lOL09VVCBieQ0KPiBGU0xfRE1BX0lOL09VVA0KPiANCj4gSGkgV2Vu
LA0KPiANCj4gVGhhbmsgeW91IGZvciB0aGUgcGF0Y2ghIFlldCBzb21ldGhpbmcgdG8gaW1wcm92
ZToNCj4gDQo+IFthdXRvIGJ1aWxkIHRlc3QgRVJST1Igb24gbGludXMvbWFzdGVyXQ0KPiBbYWxz
byBidWlsZCB0ZXN0IEVSUk9SIG9uIHY0LjE1LXJjNSBuZXh0LTIwMTcxMjIyXSBbaWYgeW91ciBw
YXRjaCBpcyBhcHBsaWVkDQo+IHRvIHRoZSB3cm9uZyBnaXQgdHJlZSwgcGxlYXNlIGRyb3AgdXMg
YSBub3RlIHRvIGhlbHAgaW1wcm92ZSB0aGUgc3lzdGVtXQ0KPiANCj4gdXJsOg0KPiBodHRwczov
L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJG
JTJGZ2l0aA0KPiB1Yi5jb20lMkYwZGF5LWNpJTJGbGludXglMkZjb21taXRzJTJGV2VuLUhlJTJG
ZG1hZW5naW5lLWZzbGRtYS1SDQo+IGVwbGFjZS1ETUFfSU4tT1VULWJ5LUZTTF9ETUFfSU4tT1VU
JTJGMjAxNzEyMjYtMDAwNzE4JmRhdGE9MDINCj4gJTdDMDElN0N3ZW4uaGVfMSU0MG54cC5jb20l
N0NhY2I5ZWNmZTAwM2Q0MzMzMjk3ZTA4ZDU0YmM0NDU0Mw0KPiAlN0M2ODZlYTFkM2JjMmI0YzZm
YTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NDk4MjI4NzU1NTU1DQo+IDA2NyZzZGF0YT1T
ajRIbUZyd0hxejFudjVCUURoNWl4dkJwcDNibnNOV2M3UTFVOFVOeUNFJTNEJnJlcw0KPiBlcnZl
ZD0wDQo+IGNvbmZpZzogcG93ZXJwYy1nZV9pbXAzYV9kZWZjb25maWcgKGF0dGFjaGVkIGFzIC5j
b25maWcpDQo+IGNvbXBpbGVyOiBwb3dlcnBjLWxpbnV4LWdudS1nY2MgKERlYmlhbiA3LjIuMC0x
MSkgNy4yLjANCj4gcmVwcm9kdWNlOg0KPiAgICAgICAgIHdnZXQNCj4gaHR0cHM6Ly9lbWVhMDEu
c2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRnJhdy4N
Cj4gZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGaW50ZWwlMkZsa3AtdGVzdHMlMkZtYXN0ZXIlMkZz
YmluJTJGbWFrZS5jcm8NCj4gc3MmZGF0YT0wMiU3QzAxJTdDd2VuLmhlXzElNDBueHAuY29tJTdD
YWNiOWVjZmUwMDNkNDMzMzI5N2UwOA0KPiBkNTRiYzQ0NTQzJTdDNjg2ZWExZDNiYzJiNGM2ZmE5
MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNjQ5DQo+IDgyMjg3NTU1NTUwNjcmc2RhdGE9ZDhx
dUxqdTdETlZ0SmtOR3I0d29kQjVXZUtlT2dwNVlkZVRqTDk5aUtscw0KPiAlM0QmcmVzZXJ2ZWQ9
MCAtTyB+L2Jpbi9tYWtlLmNyb3NzDQo+ICAgICAgICAgY2htb2QgK3ggfi9iaW4vbWFrZS5jcm9z
cw0KPiAgICAgICAgICMgc2F2ZSB0aGUgYXR0YWNoZWQgLmNvbmZpZyB0byBsaW51eCBidWlsZCB0
cmVlDQo+ICAgICAgICAgbWFrZS5jcm9zcyBBUkNIPXBvd2VycGMNCj4gDQo+IEFsbCBlcnJvci93
YXJuaW5ncyAobmV3IG9uZXMgcHJlZml4ZWQgYnkgPj4pOg0KPiANCj4gICAgSW4gZmlsZSBpbmNs
dWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQxOjA6DQo+ID4+IGRyaXZlcnMvZG1hL2Zz
bGRtYS5oOjIyOToxMzogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnaW9yZWFkMzInDQo+
ICAgICBzdGF0aWMgdm9pZCBpb3JlYWQzMihjb25zdCB1MzIgX19pb21lbSAqYWRkcikNCj4gICAg
ICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bv
d2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjowLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20g
aW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVk
ZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJw
Yy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGlu
Y2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNs
dWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5j
bHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMv
ZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNsdWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6MzI6MjE6
IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mDQo+ICdpb3JlYWQzMicgd2FzIGhlcmUNCj4g
ICAgIGV4dGVybiB1bnNpZ25lZCBpbnQgaW9yZWFkMzIodm9pZCBfX2lvbWVtICopOw0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICBefn5+fn5+fg0KPiAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20g
ZHJpdmVycy9kbWEvZnNsZG1hLmM6NDE6MDoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6IElu
IGZ1bmN0aW9uICdpb3JlYWQzMic6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzMTo5OiB3
YXJuaW5nOiAncmV0dXJuJyB3aXRoIGEgdmFsdWUsIGluDQo+ID4+IGZ1bmN0aW9uIHJldHVybmlu
ZyB2b2lkDQo+ICAgICAgcmV0dXJuIGluX2xlMzIoYWRkcik7DQo+ICAgICAgICAgICAgIF5+fn5+
fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjI5OjEzOiBub3RlOiBkZWNsYXJl
ZCBoZXJlDQo+ICAgICBzdGF0aWMgdm9pZCBpb3JlYWQzMihjb25zdCB1MzIgX19pb21lbSAqYWRk
cikNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5o
OiBBdCB0b3AgbGV2ZWw6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzNDoxMzogZXJyb3I6
IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnaW93cml0ZTMyJw0KPiAgICAgc3RhdGljIHZvaWQgaW93
cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+
fn5+fn5+DQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9h
c20vaW8uaDozNjowLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9p
by5oOjI1LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoy
NSwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9o
YXJkaXJxLmg6NiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFy
ZGlycS5oOjksDQo+ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVy
cnVwdC5oOjEzLA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2ku
aDozMiwNCj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5
Og0KPiAgICBpbmNsdWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6NDI6MTM6IG5vdGU6IHByZXZpb3Vz
IGRlY2xhcmF0aW9uIG9mDQo+ICdpb3dyaXRlMzInIHdhcyBoZXJlDQo+ICAgICBleHRlcm4gdm9p
ZCBpb3dyaXRlMzIodTMyLCB2b2lkIF9faW9tZW0gKik7DQo+ICAgICAgICAgICAgICAgICBefn5+
fn5+fn4NCj4gICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQx
OjA6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzOToxMzogZXJyb3I6IGNvbmZsaWN0aW5n
IHR5cGVzIGZvciAnaW9yZWFkMzJiZScNCj4gICAgIHN0YXRpYyB2b2lkIGlvcmVhZDMyYmUoY29u
c3QgdTMyIF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAgICBefn5+fn5+fn5+DQo+ICAg
IEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjow
LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAg
ICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAg
ICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwN
Cj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+
ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0K
PiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAg
ICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNs
dWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6MzM6MjE6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9u
IG9mDQo+ICdpb3JlYWQzMmJlJyB3YXMgaGVyZQ0KPiAgICAgZXh0ZXJuIHVuc2lnbmVkIGludCBp
b3JlYWQzMmJlKHZvaWQgX19pb21lbSAqKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgXn5+
fn5+fn5+fg0KPiAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gZHJpdmVycy9kbWEvZnNsZG1hLmM6
NDE6MDoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6IEluIGZ1bmN0aW9uICdpb3JlYWQzMmJl
JzoNCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQxOjk6IHdhcm5pbmc6ICdyZXR1cm4nIHdp
dGggYSB2YWx1ZSwgaW4gZnVuY3Rpb24NCj4gcmV0dXJuaW5nIHZvaWQNCj4gICAgICByZXR1cm4g
aW5fYmUzMihhZGRyKTsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fn5+fg0KPiAgICBkcml2ZXJz
L2RtYS9mc2xkbWEuaDoyMzk6MTM6IG5vdGU6IGRlY2xhcmVkIGhlcmUNCj4gICAgIHN0YXRpYyB2
b2lkIGlvcmVhZDMyYmUoY29uc3QgdTMyIF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAg
ICBefn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOiBBdCB0b3AgbGV2ZWw6DQo+
ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI0NDoxMzogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVz
IGZvciAnaW93cml0ZTMyYmUnDQo+ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzJiZSh1MzIgX19p
b21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+ICAg
IEluIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaDozNjow
LA0KPiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pby5oOjI1LA0KPiAg
ICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9pcnEuaDoyNSwNCj4gICAgICAg
ICAgICAgICAgICAgICBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmg6NiwN
Cj4gICAgICAgICAgICAgICAgICAgICBmcm9tIGluY2x1ZGUvbGludXgvaGFyZGlycS5oOjksDQo+
ICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjEzLA0K
PiAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jbHVkZS9saW51eC9wY2kuaDozMiwNCj4gICAg
ICAgICAgICAgICAgICAgICBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjI5Og0KPiAgICBpbmNs
dWRlL2FzbS1nZW5lcmljL2lvbWFwLmg6NDM6MTM6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9u
IG9mDQo+ICdpb3dyaXRlMzJiZScgd2FzIGhlcmUNCj4gICAgIGV4dGVybiB2b2lkIGlvd3JpdGUz
MmJlKHUzMiwgdm9pZCBfX2lvbWVtICopOw0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4N
Cj4gICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjQxOjA6DQo+
ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJbiBmdW5jdGlvbiAnc2V0X3NyJzoNCj4gPj4gZHJp
dmVycy9kbWEvZnNsZG1hLmM6NTY6Mzc6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMSBvZg0K
PiA+PiAnaW93cml0ZTMyYmUnIG1ha2VzIHBvaW50ZXIgZnJvbSBpbnRlZ2VyIHdpdGhvdXQgYSBj
YXN0DQo+ID4+IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZj
aGFuLT5yZWdzLT5zciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1NjoyMzogbm90ZTogaW4g
ZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICBpb3dyaXRlIyN3
aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUjI3dpZHRoIFwNCj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICBefn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQ0OjEzOiBub3RlOiBl
eHBlY3RlZCAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBv
ZiB0eXBlICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0
ZTMyYmUodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgICAgICAgICAgICAgICBefn5+
fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo1NjoyMDogd2FybmluZzogcGFzc2lu
ZyBhcmd1bWVudCAyIG9mDQo+ID4+ICdpb3dyaXRlMzJiZScgbWFrZXMgaW50ZWdlciBmcm9tIHBv
aW50ZXIgd2l0aG91dCBhIGNhc3QNCj4gPj4gWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNM
X0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPnNyLCB2YWwsIDMyKTsNCj4gICAgICAgICAgICAg
ICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1NjoyODogbm90ZTogaW4g
ZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICBpb3dyaXRlIyN3
aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUjI3dpZHRoIFwNCj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjQ0OjEzOiBu
b3RlOiBleHBlY3RlZCAndTMyIHtha2EgdW5zaWduZWQgaW50fScgYnV0DQo+IGFyZ3VtZW50IGlz
IG9mIHR5cGUgJ3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0KPiAgICAgc3RhdGljIHZvaWQg
aW93cml0ZTMyYmUodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgICAgICAgICAgICAg
ICBefn5+fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo1NjozNzogd2FybmluZzog
cGFzc2luZyBhcmd1bWVudCAxIG9mDQo+ID4+ICdpb3dyaXRlMzInIG1ha2VzIHBvaW50ZXIgZnJv
bSBpbnRlZ2VyIHdpdGhvdXQgYSBjYXN0DQo+ID4+IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAg
IEZTTF9ETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5zciwgdmFsLCAzMik7DQo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRt
YS5oOjI1Nzo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvICdGU0xfRE1BX09VVCcNCj4g
ICAgICAgICh2YWwsIGFkZHIpKQ0KPiAgICAgICAgIF5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xk
bWEuaDoyMzQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1MzIgKiB7YWthIHVuc2lnbmVkIGludCAqfScN
Cj4gYnV0IGFyZ3VtZW50IGlzIG9mIHR5cGUgJ3UzMiB7YWthIHVuc2lnbmVkIGludH0nDQo+ICAg
ICBzdGF0aWMgdm9pZCBpb3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAg
ICAgICAgICAgICAgICBefn5+fn5+fn4NCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmM6NTY6MjA6
IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMiBvZg0KPiA+PiAnaW93cml0ZTMyJyBtYWtlcyBp
bnRlZ2VyIGZyb20gcG9pbnRlciB3aXRob3V0IGEgY2FzdA0KPiA+PiBbLVdpbnQtY29udmVyc2lv
bl0NCj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+c3IsIHZhbCwgMzIpOw0K
PiAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjU3
OjEwOiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvDQo+ICdGU0xfRE1BX09VVCcNCj4gICAg
ICAgICh2YWwsIGFkZHIpKQ0KPiAgICAgICAgICAgICAgXn5+fg0KPiAgICBkcml2ZXJzL2RtYS9m
c2xkbWEuaDoyMzQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9JyBi
dXQNCj4gYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+
ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+
ICAgICAgICAgICAgICAgICBefn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6IElu
IGZ1bmN0aW9uICdnZXRfc3InOg0KPiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTI6Mjg6IGVy
cm9yOiB2b2lkIHZhbHVlIG5vdCBpZ25vcmVkIGFzIGl0DQo+ID4+IG91Z2h0IHRvIGJlDQo+ICAg
ICAgICgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/ICBcDQo+ICAg
ICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAg
ICAgICBpb3JlYWQjI3dpZHRoIyNiZShhZGRyKSA6IGlvcmVhZCMjd2lkdGgoYWRkcikpDQo+ICAg
ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5efn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ID4+
IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjYxOjk6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAn
RlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNMX0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+
c3IsIDMyKTsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xk
bWEuYzogSW4gZnVuY3Rpb24gJ3NldF9tcic6DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjY2
OjM3OiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50IDEgb2YNCj4gJ2lvd3JpdGUzMmJlJyBtYWtl
cyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbLVdpbnQtY29udmVyc2lvbl0N
Cj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIHZhbCwgMzIpOw0KPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2Rt
YS9mc2xkbWEuaDoyNTY6MjM6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8NCj4gJ0ZTTF9E
TUFfT1VUJw0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2JlKHZhbCwgYWRkcikgOiBpb3dyaXRl
IyN3aWR0aCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+DQo+ICAgIGRyaXZlcnMv
ZG1hL2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQgJ3UzMiAqIHtha2EgdW5zaWduZWQg
aW50ICp9Jw0KPiBidXQgYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyIHtha2EgdW5zaWduZWQgaW50
fScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg
dmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNs
ZG1hLmM6NjY6MjA6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMiBvZg0KPiAnaW93cml0ZTMy
YmUnIG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhvdXQgYSBjYXN0IFstV2ludC1jb252
ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgdmFsLCAz
Mik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEu
aDoyNTY6Mjg6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8NCj4gJ0ZTTF9ETUFfT1VUJw0K
PiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2JlKHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBc
DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+DQo+ICAgIGRyaXZlcnMvZG1h
L2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQgJ3UzMiB7YWthIHVuc2lnbmVkIGludH0n
IGJ1dA0KPiBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIgKiB7YWthIHVuc2lnbmVkIGludCAqfScN
Cj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFs
KQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1h
LmM6NjY6Mzc6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1lbnQgMSBvZiAnaW93cml0ZTMyJw0KPiBt
YWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCBbLVdpbnQtY29udmVyc2lv
bl0NCj4gICAgICBGU0xfRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIHZhbCwgMzIpOw0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAgICBkcml2ZXJz
L2RtYS9mc2xkbWEuaDoyNTc6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyAnRlNMX0RN
QV9PVVQnDQo+ICAgICAgICAodmFsLCBhZGRyKSkNCj4gICAgICAgICBefn4NCj4gICAgZHJpdmVy
cy9kbWEvZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBlY3RlZCAndTMyICoge2FrYSB1bnNpZ25l
ZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIge2FrYSB1bnNpZ25lZCBp
bnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg
dmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRt
YS5jOjY2OjIwOiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50IDIgb2YgJ2lvd3JpdGUzMicNCj4g
bWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91dCBhIGNhc3QgWy1XaW50LWNvbnZlcnNp
b25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCB2YWwsIDMyKTsN
Cj4gICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI1
NzoxMDogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybw0KPiAnRlNMX0RNQV9PVVQnDQo+ICAg
ICAgICAodmFsLCBhZGRyKSkNCj4gICAgICAgICAgICAgIF5+fn4NCj4gICAgZHJpdmVycy9kbWEv
ZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBlY3RlZCAndTMyIHtha2EgdW5zaWduZWQgaW50fScg
YnV0DQo+IGFyZ3VtZW50IGlzIG9mIHR5cGUgJ3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0K
PiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0K
PiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJ
biBmdW5jdGlvbiAnZ2V0X21yJzoNCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjI4OiBl
cnJvcjogdm9pZCB2YWx1ZSBub3QgaWdub3JlZCBhcyBpdA0KPiA+PiBvdWdodCB0byBiZQ0KPiAg
ICAgICAoKChmc2xfZG1hKS0+ZmVhdHVyZSAmIEZTTF9ETUFfQklHX0VORElBTikgPyAgXA0KPiAg
ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAg
ICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQjI3dpZHRoKGFkZHIpKQ0KPiAg
ICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Xn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAg
ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzo3MTo5OiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8g
J0ZTTF9ETUFfSU4nDQo+ICAgICAgcmV0dXJuIEZTTF9ETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3Mt
Pm1yLCAzMik7DQo+ICAgICAgICAgICAgIF5+fn5+fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNs
ZG1hLmM6IEluIGZ1bmN0aW9uICdzZXRfY2Rhcic6DQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5o
OjI1Njo0OiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24NCj4gPj4gJ2lv
d3JpdGU2NGJlJzsgZGlkIHlvdSBtZWFuICdpb3dyaXRlMzJiZSc/DQo+ID4+IFstV2Vycm9yPWlt
cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQ0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2Jl
KHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBcDQo+ICAgICAgICBeDQo+ID4+IGRyaXZlcnMv
ZG1hL2ZzbGRtYS5jOjc2OjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9P
VVQnDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIGFkZHIgfCBG
U0xfRE1BX1NORU4sIDY0KTsNCj4gICAgICBefn5+fn5+fn5+fg0KPiA+PiBkcml2ZXJzL2RtYS9m
c2xkbWEuaDoyNTY6MzY6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbg0K
PiA+PiAnaW93cml0ZTY0JzsgZGlkIHlvdSBtZWFuICdpb3dyaXRlMzInPw0KPiA+PiBbLVdlcnJv
cj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gICAgICAgIGlvd3JpdGUjI3dpZHRo
IyNiZSh2YWwsIGFkZHIpIDogaW93cml0ZSMjd2lkdGggXA0KPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBeDQo+ID4+IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjc2OjI6IG5v
dGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9PVVQnDQo+ICAgICAgRlNMX0RNQV9P
VVQoY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIGFkZHIgfCBGU0xfRE1BX1NORU4sIDY0KTsNCj4g
ICAgICBefn5+fn5+fn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24g
J2dldF9jZGFyJzoNCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjQ6IGVycm9yOiBpbXBs
aWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbg0KPiA+PiAnaW9yZWFkNjRiZSc7IGRpZCB5b3Ug
bWVhbiAnaW9yZWFkMzJiZSc/DQo+ID4+IFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xh
cmF0aW9uXQ0KPiAgICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQjI3dpZHRo
KGFkZHIpKQ0KPiAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzo4MTo5OiBub3Rl
OiBpbiBleHBhbnNpb24gb2YgbWFjcm8gJ0ZTTF9ETUFfSU4nDQo+ICAgICAgcmV0dXJuIEZTTF9E
TUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPmNkYXIsIDY0KSAmIH5GU0xfRE1BX1NORU47DQo+ICAg
ICAgICAgICAgIF5+fn5+fn5+fn4NCj4gPj4gZHJpdmVycy9kbWEvZnNsZG1hLmg6MjUyOjMwOiBl
cnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24NCj4gPj4gJ2lvcmVhZDY0Jzsg
ZGlkIHlvdSBtZWFuICdpb3JlYWQzMic/DQo+ID4+IFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9u
LWRlY2xhcmF0aW9uXQ0KPiAgICAgICAgaW9yZWFkIyN3aWR0aCMjYmUoYWRkcikgOiBpb3JlYWQj
I3dpZHRoKGFkZHIpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeDQo+ICAg
IGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjgxOjk6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAn
RlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNMX0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+
Y2RhciwgNjQpICYgfkZTTF9ETUFfU05FTjsNCj4gICAgICAgICAgICAgXn5+fn5+fn5+fg0KPiAg
ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ3NldF9iY3InOg0KPiAgICBkcml2
ZXJzL2RtYS9mc2xkbWEuYzo4NjozODogd2FybmluZzogcGFzc2luZyBhcmd1bWVudCAxIG9mDQo+
ICdpb3dyaXRlMzJiZScgbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3Qg
Wy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3Mt
PmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTY6MjM6IG5vdGU6IGluIGRlZmluaXRp
b24gb2YgbWFjcm8NCj4gJ0ZTTF9ETUFfT1VUJw0KPiAgICAgICAgaW93cml0ZSMjd2lkdGgjI2Jl
KHZhbCwgYWRkcikgOiBpb3dyaXRlIyN3aWR0aCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjI0NDoxMzogbm90ZTogZXhwZWN0ZWQg
J3UzMiAqIHtha2EgdW5zaWduZWQgaW50ICp9Jw0KPiBidXQgYXJndW1lbnQgaXMgb2YgdHlwZSAn
dTMyIHtha2EgdW5zaWduZWQgaW50fScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUz
MiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4N
Cj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6ODY6MjA6IHdhcm5pbmc6IHBhc3NpbmcgYXJndW1l
bnQgMiBvZg0KPiAnaW93cml0ZTMyYmUnIG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhv
dXQgYSBjYXN0IFstV2ludC1jb252ZXJzaW9uXQ0KPiAgICAgIEZTTF9ETUFfT1VUKGNoYW4sICZj
aGFuLT5yZWdzLT5iY3IsIHZhbCwgMzIpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgIF4NCj4g
ICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjU2OjI4OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h
Y3JvDQo+ICdGU0xfRE1BX09VVCcNCj4gICAgICAgIGlvd3JpdGUjI3dpZHRoIyNiZSh2YWwsIGFk
ZHIpIDogaW93cml0ZSMjd2lkdGggXA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Xn5+fg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNDQ6MTM6IG5vdGU6IGV4cGVjdGVkICd1
MzIge2FrYSB1bnNpZ25lZCBpbnR9JyBidXQNCj4gYXJndW1lbnQgaXMgb2YgdHlwZSAndTMyICog
e2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+ICAgICBzdGF0aWMgdm9pZCBpb3dyaXRlMzJiZSh1MzIg
X19pb21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+
ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjg2OjM4OiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3VtZW50
IDEgb2YgJ2lvd3JpdGUzMicNCj4gbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBh
IGNhc3QgWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNoYW4t
PnJlZ3MtPmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTc6NTogbm90ZTogaW4gZGVm
aW5pdGlvbiBvZiBtYWNybyAnRlNMX0RNQV9PVVQnDQo+ICAgICAgICAodmFsLCBhZGRyKSkNCj4g
ICAgICAgICBefn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmg6MjM0OjEzOiBub3RlOiBleHBl
Y3RlZCAndTMyICoge2FrYSB1bnNpZ25lZCBpbnQgKn0nDQo+IGJ1dCBhcmd1bWVudCBpcyBvZiB0
eXBlICd1MzIge2FrYSB1bnNpZ25lZCBpbnR9Jw0KPiAgICAgc3RhdGljIHZvaWQgaW93cml0ZTMy
KHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQ0KPiAgICAgICAgICAgICAgICAgXn5+fn5+fn5+
DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjg2OjIwOiB3YXJuaW5nOiBwYXNzaW5nIGFyZ3Vt
ZW50IDIgb2YgJ2lvd3JpdGUzMicNCj4gbWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91
dCBhIGNhc3QgWy1XaW50LWNvbnZlcnNpb25dDQo+ICAgICAgRlNMX0RNQV9PVVQoY2hhbiwgJmNo
YW4tPnJlZ3MtPmJjciwgdmFsLCAzMik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgXg0KPiAg
ICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyNTc6MTA6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFj
cm8NCj4gJ0ZTTF9ETUFfT1VUJw0KPiAgICAgICAgKHZhbCwgYWRkcikpDQo+ICAgICAgICAgICAg
ICBefn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIzNDoxMzogbm90ZTogZXhwZWN0ZWQg
J3UzMiB7YWthIHVuc2lnbmVkIGludH0nIGJ1dA0KPiBhcmd1bWVudCBpcyBvZiB0eXBlICd1MzIg
KiB7YWthIHVuc2lnbmVkIGludCAqfScNCj4gICAgIHN0YXRpYyB2b2lkIGlvd3JpdGUzMih1MzIg
X19pb21lbSAqYWRkciwgdTMyIHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+fg0KPiAg
ICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ2dldF9iY3InOg0KPiA+PiBkcml2
ZXJzL2RtYS9mc2xkbWEuaDoyNTI6Mjg6IGVycm9yOiB2b2lkIHZhbHVlIG5vdCBpZ25vcmVkIGFz
IGl0DQo+ID4+IG91Z2h0IHRvIGJlDQo+ICAgICAgICgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNM
X0RNQV9CSUdfRU5ESUFOKSA/ICBcDQo+ICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgICAgICBpb3JlYWQjI3dpZHRoIyNiZShhZGRyKSA6
IGlvcmVhZCMjd2lkdGgoYWRkcikpDQo+ICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5e
fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjkxOjk6IG5v
dGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnRlNMX0RNQV9JTicNCj4gICAgICByZXR1cm4gRlNM
X0RNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+YmNyLCAzMik7DQo+ICAgICAgICAgICAgIF5+fn5+
fn5+fn4NCj4gICAgZHJpdmVycy9kbWEvZnNsZG1hLmM6IEluIGZ1bmN0aW9uICdnZXRfbXInOg0K
PiA+PiBkcml2ZXJzL2RtYS9mc2xkbWEuYzo3MjoxOiB3YXJuaW5nOiBjb250cm9sIHJlYWNoZXMg
ZW5kIG9mIG5vbi12b2lkDQo+ID4+IGZ1bmN0aW9uIFstV3JldHVybi10eXBlXQ0KPiAgICAgfQ0K
PiAgICAgXg0KPiAgICBkcml2ZXJzL2RtYS9mc2xkbWEuYzogSW4gZnVuY3Rpb24gJ2dldF9zcic6
DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjYyOjE6IHdhcm5pbmc6IGNvbnRyb2wgcmVhY2hl
cyBlbmQgb2Ygbm9uLXZvaWQNCj4gZnVuY3Rpb24gWy1XcmV0dXJuLXR5cGVdDQo+ICAgICB9DQo+
ICAgICBeDQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOiBJbiBmdW5jdGlvbiAnZ2V0X2Jjcic6
DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5jOjkyOjE6IHdhcm5pbmc6IGNvbnRyb2wgcmVhY2hl
cyBlbmQgb2Ygbm9uLXZvaWQNCj4gZnVuY3Rpb24gWy1XcmV0dXJuLXR5cGVdDQo+ICAgICB9DQo+
ICAgICBeDQo+ICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBkcml2ZXJzL2RtYS9mc2xkbWEuYzo0
MTowOg0KPiAgICBBdCB0b3AgbGV2ZWw6DQo+ICAgIGRyaXZlcnMvZG1hL2ZzbGRtYS5oOjIyMDox
Mzogd2FybmluZzogJ291dF9sZTY0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZA0KPiBbLVd1bnVzZWQt
ZnVuY3Rpb25dDQo+ICAgICBzdGF0aWMgdm9pZCBvdXRfbGU2NCh1NjQgX19pb21lbSAqYWRkciwg
dTY0IHZhbCkNCj4gICAgICAgICAgICAgICAgIF5+fn5+fn5+DQo+ICAgIGRyaXZlcnMvZG1hL2Zz
bGRtYS5oOjIxNDoxMjogd2FybmluZzogJ2luX2xlNjQnIGRlZmluZWQgYnV0IG5vdCB1c2VkDQo+
IFstV3VudXNlZC1mdW5jdGlvbl0NCj4gICAgIHN0YXRpYyB1NjQgaW5fbGU2NChjb25zdCB1NjQg
X19pb21lbSAqYWRkcikNCj4gICAgICAgICAgICAgICAgXn5+fn5+fg0KPiAgICBkcml2ZXJzL2Rt
YS9mc2xkbWEuaDoyMDc6MTM6IHdhcm5pbmc6ICdvdXRfYmU2NCcgZGVmaW5lZCBidXQgbm90IHVz
ZWQNCj4gWy1XdW51c2VkLWZ1bmN0aW9uXQ0KPiAgICAgc3RhdGljIHZvaWQgb3V0X2JlNjQodTY0
IF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpDQo+ICAgICAgICAgICAgICAgICBefn5+fn5+fg0KPiAg
ICBkcml2ZXJzL2RtYS9mc2xkbWEuaDoyMDE6MTI6IHdhcm5pbmc6ICdpbl9iZTY0JyBkZWZpbmVk
IGJ1dCBub3QgdXNlZA0KPiBbLVd1bnVzZWQtZnVuY3Rpb25dDQo+ICAgICBzdGF0aWMgdTY0IGlu
X2JlNjQoY29uc3QgdTY0IF9faW9tZW0gKmFkZHIpDQo+ICAgICAgICAgICAgICAgIF5+fn5+fn4N
Cj4gICAgY2MxOiBzb21lIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzDQo+IA0KPiB2
aW0gKy9pb3JlYWQzMiArMjI5IGRyaXZlcnMvZG1hL2ZzbGRtYS5oDQo+IA0KPiAgICAyMjcNCj4g
ICAgMjI4CSNpZmRlZiBDT05GSUdfUFBDDQo+ICA+IDIyOQlzdGF0aWMgdm9pZCBpb3JlYWQzMihj
b25zdCB1MzIgX19pb21lbSAqYWRkcikNCj4gICAgMjMwCXsNCj4gID4gMjMxCQlyZXR1cm4gaW5f
bGUzMihhZGRyKTsNCj4gICAgMjMyCX0NCj4gICAgMjMzDQo+ICA+IDIzNAlzdGF0aWMgdm9pZCBp
b3dyaXRlMzIodTMyIF9faW9tZW0gKmFkZHIsIHUzMiB2YWwpDQo+ICAgIDIzNQl7DQo+ICAgIDIz
NgkJb3V0X2xlMzIoYWRkciwgdmFsKTsNCj4gICAgMjM3CX0NCj4gICAgMjM4DQo+ICA+IDIzOQlz
dGF0aWMgdm9pZCBpb3JlYWQzMmJlKGNvbnN0IHUzMiBfX2lvbWVtICphZGRyKQ0KPiAgICAyNDAJ
ew0KPiAgPiAyNDEJCXJldHVybiBpbl9iZTMyKGFkZHIpOw0KPiAgICAyNDIJfQ0KPiAgICAyNDMN
Cj4gID4gMjQ0CXN0YXRpYyB2b2lkIGlvd3JpdGUzMmJlKHUzMiBfX2lvbWVtICphZGRyLCB1MzIg
dmFsKQ0KPiAgICAyNDUJew0KPiAgICAyNDYJCW91dF9iZTMyKGFkZHIsIHZhbCk7DQo+ICAgIDI0
Nwl9DQo+ICAgIDI0OAkjZW5kaWYNCj4gICAgMjQ5DQo+ICAgIDI1MAkjZGVmaW5lIEZTTF9ETUFf
SU4oZnNsX2RtYSwgYWRkciwgd2lkdGgpCQkJCVwNCj4gICAgMjUxCQkJKCgoZnNsX2RtYSktPmZl
YXR1cmUgJiBGU0xfRE1BX0JJR19FTkRJQU4pID8NCj4gCVwNCj4gID4gMjUyCQkJCWlvcmVhZCMj
d2lkdGgjI2JlKGFkZHIpIDogaW9yZWFkIyN3aWR0aChhZGRyKSkNCj4gICAgMjUzDQo+ICAgIDI1
NAkjZGVmaW5lIEZTTF9ETUFfT1VUKGZzbF9kbWEsIGFkZHIsIHZhbCwgd2lkdGgpDQo+IAlcDQo+
ICAgIDI1NQkJCSgoKGZzbF9kbWEpLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/DQo+
IAlcDQo+ICA+IDI1NgkJCQlpb3dyaXRlIyN3aWR0aCMjYmUodmFsLCBhZGRyKSA6IGlvd3JpdGUj
I3dpZHRoCVwNCj4gID4gMjU3CQkJICh2YWwsIGFkZHIpKQ0KPiAgICAyNTgNCj4gDQo+IC0tLQ0K
PiAwLURBWSBrZXJuZWwgdGVzdCBpbmZyYXN0cnVjdHVyZSAgICAgICAgICAgICAgICBPcGVuIFNv
dXJjZSBUZWNobm9sb2d5DQo+IENlbnRlcg0KPiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJv
dGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGbGlzdHMuDQo+IDAxLm9yZyUy
RnBpcGVybWFpbCUyRmtidWlsZC1hbGwmZGF0YT0wMiU3QzAxJTdDd2VuLmhlXzElNDBueHAuY29t
DQo+ICU3Q2FjYjllY2ZlMDAzZDQzMzMyOTdlMDhkNTRiYzQ0NTQzJTdDNjg2ZWExZDNiYzJiNGM2
ZmE5MmNkOTljDQo+IDVjMzAxNjM1JTdDMCU3QzAlN0M2MzY0OTgyMjg3NTU1NTUwNjcmc2RhdGE9
Rlo4Wk00OGlyN0NrMTgyam0NCj4gVjQ4bjVmeW5kSVJFa25hekYzREk2bmNFeTAlM0QmcmVzZXJ2
ZWQ9MCAgICAgICAgICAgICAgICAgICBJbnRlbA0KPiBDb3Jwb3JhdGlvbg0K
--
To unsubscribe from this list: send the line "unsubscribe dmaengine" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index 3eaece8..75479d6 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -53,42 +53,42 @@ 
 
 static void set_sr(struct fsldma_chan *chan, u32 val)
 {
-	DMA_OUT(chan, &chan->regs->sr, val, 32);
+	FSL_DMA_OUT(chan, &chan->regs->sr, val, 32);
 }
 
 static u32 get_sr(struct fsldma_chan *chan)
 {
-	return DMA_IN(chan, &chan->regs->sr, 32);
+	return FSL_DMA_IN(chan, &chan->regs->sr, 32);
 }
 
 static void set_mr(struct fsldma_chan *chan, u32 val)
 {
-	DMA_OUT(chan, &chan->regs->mr, val, 32);
+	FSL_DMA_OUT(chan, &chan->regs->mr, val, 32);
 }
 
 static u32 get_mr(struct fsldma_chan *chan)
 {
-	return DMA_IN(chan, &chan->regs->mr, 32);
+	return FSL_DMA_IN(chan, &chan->regs->mr, 32);
 }
 
 static void set_cdar(struct fsldma_chan *chan, dma_addr_t addr)
 {
-	DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64);
+	FSL_DMA_OUT(chan, &chan->regs->cdar, addr | FSL_DMA_SNEN, 64);
 }
 
 static dma_addr_t get_cdar(struct fsldma_chan *chan)
 {
-	return DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN;
+	return FSL_DMA_IN(chan, &chan->regs->cdar, 64) & ~FSL_DMA_SNEN;
 }
 
 static void set_bcr(struct fsldma_chan *chan, u32 val)
 {
-	DMA_OUT(chan, &chan->regs->bcr, val, 32);
+	FSL_DMA_OUT(chan, &chan->regs->bcr, val, 32);
 }
 
 static u32 get_bcr(struct fsldma_chan *chan)
 {
-	return DMA_IN(chan, &chan->regs->bcr, 32);
+	return FSL_DMA_IN(chan, &chan->regs->bcr, 32);
 }
 
 /*
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
index 4787d48..94c0773 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -196,6 +196,7 @@  struct fsldma_chan {
 #define to_fsl_desc(lh) container_of(lh, struct fsl_desc_sw, node)
 #define tx_to_fsl_desc(tx) container_of(tx, struct fsl_desc_sw, async_tx)
 
+#ifdef CONFIG_PPC
 #ifndef __powerpc64__
 static u64 in_be64(const u64 __iomem *addr)
 {
@@ -222,13 +223,38 @@  static void out_le64(u64 __iomem *addr, u64 val)
 	out_le32((u32 __iomem *)addr, (u32)val);
 }
 #endif
+#endif
 
-#define DMA_IN(fsl_chan, addr, width)					\
-		(((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ?		\
-			in_be##width(addr) : in_le##width(addr))
-#define DMA_OUT(fsl_chan, addr, val, width)				\
-		(((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ?		\
-			out_be##width(addr, val) : out_le##width(addr, val))
+#ifdef CONFIG_PPC
+static void ioread32(const u32 __iomem *addr)
+{
+	return in_le32(addr);
+}
+
+static void iowrite32(u32 __iomem *addr, u32 val)
+{
+	out_le32(addr, val);
+}
+
+static void ioread32be(const u32 __iomem *addr)
+{
+	return in_be32(addr);
+}
+
+static void iowrite32be(u32 __iomem *addr, u32 val)
+{
+	out_be32(addr, val);
+}
+#endif
+
+#define FSL_DMA_IN(fsl_dma, addr, width)				\
+		(((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?		\
+			ioread##width##be(addr) : ioread##width(addr))
+
+#define FSL_DMA_OUT(fsl_dma, addr, val, width)				\
+		(((fsl_dma)->feature & FSL_DMA_BIG_ENDIAN) ?		\
+			iowrite##width##be(val, addr) : iowrite##width	\
+		 (val, addr))
 
 #define DMA_TO_CPU(fsl_chan, d, width)					\
 		(((fsl_chan)->feature & FSL_DMA_BIG_ENDIAN) ?		\