From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 72995 invoked by alias); 8 Nov 2019 17:07:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 72986 invoked by uid 89); 8 Nov 2019 17:07:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,MISSING_MID autolearn=ham version=3.3.1 spammy=sk:single, sk:single- X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.110.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 08 Nov 2019 17:06:59 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AF47131B; Fri, 8 Nov 2019 09:06:57 -0800 (PST) Received: from e121093-lin.cambridge.arm.com (e121093-lin.cambridge.arm.com [10.2.206.226]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 193953F71A; Fri, 8 Nov 2019 09:06:56 -0800 (PST) Content-Type: multipart/mixed; boundary="===============6008213964926034296==" MIME-Version: 1.0 From: Mihail Ionescu Date: Fri, 08 Nov 2019 17:07:00 -0000 To: gcc-patches@gcc.gnu.org Cc: kyrylo.tkachov@arm.com, Richard.Earnshaw@arm.com Subject: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions X-IsSubscribed: yes X-SW-Source: 2019-11/txt/msg00641.txt.bz2 Message-ID: <20191108170700.R8-F0KgHuAaHF8N4j7kEG4bIU1cwEJfWQbtdrlEkiEI@z> --===============6008213964926034296== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-length: 6866 Hi, This patch adds CLI and multilib support for Armv8.1-M MVE to the Arm backend. Two new option added for v8.1-m.main: "+mve" for integer MVE instructions only and "+mve.fp" for both integer and single-precision/half-precision floating-point MVE. The patch also maps the Armv8.1-M multilib variants to the corresponding v8-M ones. gcc/ChangeLog: 2019-11-08 Mihail Ionescu 2019-11-08 Andre Vieira * config/arm/arm-cpus.in (mve, mve_float): New features. (dsp, mve, mve.fp): New options. * config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT): Define. * config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M. gcc/testsuite/ChangeLog: 2019-11-08 Mihail Ionescu 2019-11-08 Andre Vieira * testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries. Is this ok for trunk? Best regards, Mihail ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in index 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in @@ -194,6 +194,10 @@ define feature sb # v8-A architectures, added by default from v8.5-A define feature predres +# M-profile Vector Extension feature bits +define feature mve +define feature mve_float + # Feature groups. Conventionally all (or mostly) upper case. # ALL_FPU lists all the feature bits associated with the floating-point # unit; these will all be removed if the floating-point unit is disabled @@ -654,9 +658,12 @@ begin arch armv8.1-m.main base 8M_MAIN isa ARMv8_1m_main # fp => FPv5-sp-d16; fp.dp => FPv5-d16 + option dsp add armv7em option fp add FPv5 fp16 option fp.dp add FPv5 FP_DBL fp16 option nofp remove ALL_FP + option mve add mve armv7em + option mve.fp add mve FPv5 fp16 mve_float armv7em end arch armv8.1-m.main begin arch iwmmxt diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -310,6 +310,12 @@ emission of floating point pcs attributes. */ instructions (most are floating-point related). */ #define TARGET_HAVE_FPCXT_CMSE (arm_arch8_1m_main) +#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \ + isa_bit_mve)) + +#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \ + isa_bit_mve_float)) + /* Nonzero if integer division instructions supported. */ #define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \ || (TARGET_THUMB && arm_arch_thumb_hwdiv)) diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile index 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef 100644 --- a/gcc/config/arm/t-rmprofile +++ b/gcc/config/arm/t-rmprofile @@ -54,7 +54,7 @@ MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp # Arch Matches MULTILIB_MATCHES += march?armv6s-m=march?armv6-m -# Map all v8-m.main+dsp FP variants down the the variant without DSP. +# Map all v8-m.main+dsp FP variants down to the variant without DSP. MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp \ $(foreach FP, +fp +fp.dp, \ march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP)) @@ -66,3 +66,18 @@ MULTILIB_MATCHES += march?armv7e-m+fp=march?armv7e-m+fpv5 MULTILIB_REUSE += $(foreach ARCH, armv6s-m armv7-m armv7e-m armv8-m\.base armv8-m\.main, \ mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp) +# Map v8.1-M to v8-M. +MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main +MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+dsp +MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+mve + +v8_1m_sp_variants = +fp +dsp+fp +mve.fp +v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp + +# Map all v8.1-m.main FP sp variants down to v8-m. +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \ + march?armv8-m.main+fp=march?armv8.1-m.main$(FP)) + +# Map all v8.1-m.main FP dp variants down to v8-m. +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \ + march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP)) diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp index dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd 100644 --- a/gcc/testsuite/gcc.target/arm/multilib.exp +++ b/gcc/testsuite/gcc.target/arm/multilib.exp @@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } { {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp" + {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard" + {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" + {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp" + {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard" + {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" + {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" + {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" } { check_multi_dir $opts $dir } --===============6008213964926034296== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Disposition: attachment; filename="diff.patch" Content-Transfer-Encoding: base64 Content-length: 7926 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS1jcHVzLmluIGIvZ2Nj L2NvbmZpZy9hcm0vYXJtLWNwdXMuaW4KaW5kZXggNTlhYWQ4ZjYyZWU1MTg2 Y2M4N2QzY2VmYWY0MGJhMmNlMDQ5MDEyZC4uYzJmMDE2Yzc1ZTJkOGRkMDY4 OTAyOTUzMjEyMzJiZWY2MWNiZDIzNCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hcm0vYXJtLWNwdXMuaW4KKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLWNw dXMuaW4KQEAgLTE5NCw2ICsxOTQsMTAgQEAgZGVmaW5lIGZlYXR1cmUgc2IK ICMgdjgtQSBhcmNoaXRlY3R1cmVzLCBhZGRlZCBieSBkZWZhdWx0IGZyb20g djguNS1BCiBkZWZpbmUgZmVhdHVyZSBwcmVkcmVzCiAKKyMgTS1wcm9maWxl IFZlY3RvciBFeHRlbnNpb24gZmVhdHVyZSBiaXRzCitkZWZpbmUgZmVhdHVy ZSBtdmUKK2RlZmluZSBmZWF0dXJlIG12ZV9mbG9hdAorCiAjIEZlYXR1cmUg Z3JvdXBzLiAgQ29udmVudGlvbmFsbHkgYWxsIChvciBtb3N0bHkpIHVwcGVy IGNhc2UuCiAjIEFMTF9GUFUgbGlzdHMgYWxsIHRoZSBmZWF0dXJlIGJpdHMg YXNzb2NpYXRlZCB3aXRoIHRoZSBmbG9hdGluZy1wb2ludAogIyB1bml0OyB0 aGVzZSB3aWxsIGFsbCBiZSByZW1vdmVkIGlmIHRoZSBmbG9hdGluZy1wb2lu dCB1bml0IGlzIGRpc2FibGVkCkBAIC02NTQsOSArNjU4LDEyIEBAIGJlZ2lu IGFyY2ggYXJtdjguMS1tLm1haW4KICBiYXNlIDhNX01BSU4KICBpc2EgQVJN djhfMW1fbWFpbgogIyBmcCA9PiBGUHY1LXNwLWQxNjsgZnAuZHAgPT4gRlB2 NS1kMTYKKyBvcHRpb24gZHNwIGFkZCBhcm12N2VtCiAgb3B0aW9uIGZwIGFk ZCBGUHY1IGZwMTYKICBvcHRpb24gZnAuZHAgYWRkIEZQdjUgRlBfREJMIGZw MTYKICBvcHRpb24gbm9mcCByZW1vdmUgQUxMX0ZQCisgb3B0aW9uIG12ZSBh ZGQgbXZlIGFybXY3ZW0KKyBvcHRpb24gbXZlLmZwIGFkZCBtdmUgRlB2NSBm cDE2IG12ZV9mbG9hdCBhcm12N2VtCiBlbmQgYXJjaCBhcm12OC4xLW0ubWFp bgogCiBiZWdpbiBhcmNoIGl3bW14dApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9hcm0vYXJtLmggYi9nY2MvY29uZmlnL2FybS9hcm0uaAppbmRleCA2NGMy OTJmMjg2MjUxNGZiNjAwYTRmYWVhZGRmZWFjYjJiNjkxODBiLi45ZWMzOGM2 YWYxYjg0ZmM5MmUyMGUzMGU4ZjA3Y2U1MzYwYTk2NmMxIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FybS9hcm0uaAorKysgYi9nY2MvY29uZmlnL2FybS9h cm0uaApAQCAtMzEwLDYgKzMxMCwxMiBAQCBlbWlzc2lvbiBvZiBmbG9hdGlu ZyBwb2ludCBwY3MgYXR0cmlidXRlcy4gICovCiAgICBpbnN0cnVjdGlvbnMg KG1vc3QgYXJlIGZsb2F0aW5nLXBvaW50IHJlbGF0ZWQpLiAgKi8KICNkZWZp bmUgVEFSR0VUX0hBVkVfRlBDWFRfQ01TRQkoYXJtX2FyY2g4XzFtX21haW4p CiAKKyNkZWZpbmUgVEFSR0VUX0hBVkVfTVZFIChiaXRtYXBfYml0X3AgKGFy bV9hY3RpdmVfdGFyZ2V0LmlzYSwgXAorCQkJCSAgICAgICBpc2FfYml0X212 ZSkpCisKKyNkZWZpbmUgVEFSR0VUX0hBVkVfTVZFX0ZMT0FUIChiaXRtYXBf Yml0X3AgKGFybV9hY3RpdmVfdGFyZ2V0LmlzYSwgXAorCQkJCQkgICAgIGlz YV9iaXRfbXZlX2Zsb2F0KSkKKwogLyogTm9uemVybyBpZiBpbnRlZ2VyIGRp dmlzaW9uIGluc3RydWN0aW9ucyBzdXBwb3J0ZWQuICAqLwogI2RlZmluZSBU QVJHRVRfSURJVgkoKFRBUkdFVF9BUk0gJiYgYXJtX2FyY2hfYXJtX2h3ZGl2 KQlcCiAJCQkgfHwgKFRBUkdFVF9USFVNQiAmJiBhcm1fYXJjaF90aHVtYl9o d2RpdikpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS90LXJtcHJvZmls ZSBiL2djYy9jb25maWcvYXJtL3Qtcm1wcm9maWxlCmluZGV4IDgwN2U2OWVh Zjc4NjI1ZjQyMmUyZDdlZjU5MzZjNWM4MGM1YjkwNzMuLjYyZTI3ZmQyODRi MjE1MjQ4OTY0MzAxNzZkNjRmZjViMDhjNmUwZWYgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvYXJtL3Qtcm1wcm9maWxlCisrKyBiL2djYy9jb25maWcvYXJt L3Qtcm1wcm9maWxlCkBAIC01NCw3ICs1NCw3IEBAIE1VTFRJTElCX1JFUVVJ UkVECSs9IG10aHVtYi9tYXJjaD1hcm12OC1tLm1haW4rZnAuZHAvbWZsb2F0 LWFiaT1zb2Z0ZnAKICMgQXJjaCBNYXRjaGVzCiBNVUxUSUxJQl9NQVRDSEVT CSs9IG1hcmNoP2FybXY2cy1tPW1hcmNoP2FybXY2LW0KIAotIyBNYXAgYWxs IHY4LW0ubWFpbitkc3AgRlAgdmFyaWFudHMgZG93biB0aGUgdGhlIHZhcmlh bnQgd2l0aG91dCBEU1AuCisjIE1hcCBhbGwgdjgtbS5tYWluK2RzcCBGUCB2 YXJpYW50cyBkb3duIHRvIHRoZSB2YXJpYW50IHdpdGhvdXQgRFNQLgogTVVM VElMSUJfTUFUQ0hFUwkrPSBtYXJjaD9hcm12OC1tLm1haW49bWFyY2g/YXJt djgtbS5tYWluK2RzcCBcCiAJCQkgICAkKGZvcmVhY2ggRlAsICtmcCArZnAu ZHAsIFwKIAkJCSAgICAgbWFyY2g/YXJtdjgtbS5tYWluJChGUCk9bWFyY2g/ YXJtdjgtbS5tYWluK2RzcCQoRlApKQpAQCAtNjYsMyArNjYsMTggQEAgTVVM VElMSUJfTUFUQ0hFUwkrPSBtYXJjaD9hcm12N2UtbStmcD1tYXJjaD9hcm12 N2UtbStmcHY1CiBNVUxUSUxJQl9SRVVTRQkJKz0gJChmb3JlYWNoIEFSQ0gs IGFybXY2cy1tIGFybXY3LW0gYXJtdjdlLW0gYXJtdjgtbVwuYmFzZSBhcm12 OC1tXC5tYWluLCBcCiAJCQkgICAgIG10aHVtYi9tYXJjaC4kKEFSQ0gpL21m bG9hdC1hYmkuc29mdD1tdGh1bWIvbWFyY2guJChBUkNIKS9tZmxvYXQtYWJp LnNvZnRmcCkKIAorIyBNYXAgdjguMS1NIHRvIHY4LU0uCitNVUxUSUxJQl9N QVRDSEVTCSs9IG1hcmNoP2FybXY4LW0ubWFpbj1tYXJjaD9hcm12OC4xLW0u bWFpbgorTVVMVElMSUJfTUFUQ0hFUwkrPSBtYXJjaD9hcm12OC1tLm1haW49 bWFyY2g/YXJtdjguMS1tLm1haW4rZHNwCitNVUxUSUxJQl9NQVRDSEVTCSs9 IG1hcmNoP2FybXY4LW0ubWFpbj1tYXJjaD9hcm12OC4xLW0ubWFpbittdmUK KwordjhfMW1fc3BfdmFyaWFudHMgPSArZnAgK2RzcCtmcCArbXZlLmZwCit2 OF8xbV9kcF92YXJpYW50cyA9ICtmcC5kcCArZHNwK2ZwLmRwICtmcC5kcCtt dmUgK2ZwLmRwK212ZS5mcAorCisjIE1hcCBhbGwgdjguMS1tLm1haW4gRlAg c3AgdmFyaWFudHMgZG93biB0byB2OC1tLgorTVVMVElMSUJfTUFUQ0hFUyAr PSAkKGZvcmVhY2ggRlAsICQodjhfMW1fc3BfdmFyaWFudHMpLCBcCisJCQkg ICAgIG1hcmNoP2FybXY4LW0ubWFpbitmcD1tYXJjaD9hcm12OC4xLW0ubWFp biQoRlApKQorCisjIE1hcCBhbGwgdjguMS1tLm1haW4gRlAgZHAgdmFyaWFu dHMgZG93biB0byB2OC1tLgorTVVMVElMSUJfTUFUQ0hFUyArPSAkKGZvcmVh Y2ggRlAsICQodjhfMW1fZHBfdmFyaWFudHMpLCBcCisJCQkgICAgIG1hcmNo P2FybXY4LW0ubWFpbitmcC5kcD1tYXJjaD9hcm12OC4xLW0ubWFpbiQoRlAp KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9t dWx0aWxpYi5leHAgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL211 bHRpbGliLmV4cAppbmRleCBkY2VhODI5OTY1ZWIxNWUzNzI0MDFlNjM4OWRm NWExNDAzMzkzZWNiLi42M2NjYTExOGRhMjU3ODI1Mzc0MGZjZDk1NDIxZWFl OWRkZjIxOWJkIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL211bHRpbGliLmV4cAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYXJtL211bHRpbGliLmV4cApAQCAtNzc1LDYgKzc3NSwyNyBAQCBp ZiB7W211bHRpbGliX2NvbmZpZyAicm1wcm9maWxlIl0gfSB7CiAJey1tYXJj aD1hcm12OC1yK2ZwLnNwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9aGFyZH0g InRodW1iL3Y3LXIrZnAuc3AvaGFyZCIKIAl7LW1hcmNoPWFybXY4LXIrY3Jj K2ZwLnNwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9c29mdGZwfSAidGh1bWIv djctcitmcC5zcC9zb2Z0ZnAiCiAJey1tYXJjaD1hcm12OC1yK2NyYytmcC5z cCAtbWZwdT1hdXRvIC1tZmxvYXQtYWJpPWhhcmR9ICJ0aHVtYi92Ny1yK2Zw LnNwL2hhcmQiCisJey1tYXJjaD1hcm12OC4xLW0ubWFpbiAtbWZwdT1hdXRv IC1tZmxvYXQtYWJpPXNvZnR9ICJ0aHVtYi92OC1tLm1haW4vbm9mcCIKKwl7 LW1hcmNoPWFybXY4LjEtbS5tYWluK2RzcCAtbWZwdT1hdXRvIC1tZmxvYXQt YWJpPXNvZnR9ICJ0aHVtYi92OC1tLm1haW4vbm9mcCIKKwl7LW1hcmNoPWFy bXY4LjEtbS5tYWluK2RzcCtmcCAtbWZwdT1hdXRvIC1tZmxvYXQtYWJpPXNv ZnR9ICJ0aHVtYi92OC1tLm1haW4vbm9mcCIKKwl7LW1hcmNoPWFybXY4LjEt bS5tYWluK2RzcCtmcC5kcCAtbWZwdT1hdXRvIC1tZmxvYXQtYWJpPXNvZnR9 ICJ0aHVtYi92OC1tLm1haW4vbm9mcCIKKwl7LW1hcmNoPWFybXY4LjEtbS5t YWluIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9c29mdGZwfSAidGh1bWIvdjgt bS5tYWluL25vZnAiCisJey1tYXJjaD1hcm12OC4xLW0ubWFpbitkc3AgLW1m cHU9YXV0byAtbWZsb2F0LWFiaT1zb2Z0ZnB9ICJ0aHVtYi92OC1tLm1haW4v bm9mcCIKKwl7LW1hcmNoPWFybXY4LjEtbS5tYWluK2RzcCtmcCAtbWZwdT1h dXRvIC1tZmxvYXQtYWJpPXNvZnRmcH0gInRodW1iL3Y4LW0ubWFpbitmcC9z b2Z0ZnAiCisJey1tYXJjaD1hcm12OC4xLW0ubWFpbitkc3ArZnAuZHAgLW1m cHU9YXV0byAtbWZsb2F0LWFiaT1zb2Z0ZnB9ICJ0aHVtYi92OC1tLm1haW4r ZHAvc29mdGZwIgorCXstbWFyY2g9YXJtdjguMS1tLm1haW4rZHNwK2ZwIC1t ZnB1PWF1dG8gLW1mbG9hdC1hYmk9aGFyZH0gInRodW1iL3Y4LW0ubWFpbitm cC9oYXJkIgorCXstbWFyY2g9YXJtdjguMS1tLm1haW4rZHNwK2ZwLmRwIC1t ZnB1PWF1dG8gLW1mbG9hdC1hYmk9aGFyZH0gInRodW1iL3Y4LW0ubWFpbitk cC9oYXJkIgorCXstbWFyY2g9YXJtdjguMS1tLm1haW4rbXZlIC1tZnB1PWF1 dG8gLW1mbG9hdC1hYmk9c29mdH0gInRodW1iL3Y4LW0ubWFpbi9ub2ZwIgor CXstbWFyY2g9YXJtdjguMS1tLm1haW4rbXZlLmZwIC1tZnB1PWF1dG8gLW1m bG9hdC1hYmk9c29mdH0gInRodW1iL3Y4LW0ubWFpbi9ub2ZwIgorCXstbWFy Y2g9YXJtdjguMS1tLm1haW4rbXZlIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9 c29mdGZwfSAidGh1bWIvdjgtbS5tYWluL25vZnAiCisJey1tYXJjaD1hcm12 OC4xLW0ubWFpbittdmUuZnAgLW1mcHU9YXV0byAtbWZsb2F0LWFiaT1zb2Z0 ZnB9ICJ0aHVtYi92OC1tLm1haW4rZnAvc29mdGZwIgorCXstbWFyY2g9YXJt djguMS1tLm1haW4rbXZlLmZwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9aGFy ZH0gInRodW1iL3Y4LW0ubWFpbitmcC9oYXJkIgorCXstbWFyY2g9YXJtdjgu MS1tLm1haW4rbXZlK2ZwLmRwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9c29m dH0gInRodW1iL3Y4LW0ubWFpbi9ub2ZwIgorCXstbWFyY2g9YXJtdjguMS1t Lm1haW4rbXZlLmZwK2ZwLmRwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9c29m dH0gInRodW1iL3Y4LW0ubWFpbi9ub2ZwIgorCXstbWFyY2g9YXJtdjguMS1t Lm1haW4rbXZlK2ZwLmRwIC1tZnB1PWF1dG8gLW1mbG9hdC1hYmk9c29mdGZw fSAidGh1bWIvdjgtbS5tYWluK2RwL3NvZnRmcCIKKwl7LW1hcmNoPWFybXY4 LjEtbS5tYWluK212ZS5mcCtmcC5kcCAtbWZwdT1hdXRvIC1tZmxvYXQtYWJp PXNvZnRmcH0gInRodW1iL3Y4LW0ubWFpbitkcC9zb2Z0ZnAiCisJey1tYXJj aD1hcm12OC4xLW0ubWFpbittdmUrZnAuZHAgLW1mcHU9YXV0byAtbWZsb2F0 LWFiaT1oYXJkfSAidGh1bWIvdjgtbS5tYWluK2RwL2hhcmQiCisJey1tYXJj aD1hcm12OC4xLW0ubWFpbittdmUuZnArZnAuZHAgLW1mcHU9YXV0byAtbWZs b2F0LWFiaT1oYXJkfSAidGh1bWIvdjgtbS5tYWluK2RwL2hhcmQiCiAgICAg fSB7CiAJY2hlY2tfbXVsdGlfZGlyICRvcHRzICRkaXIKICAgICB9Cgo= --===============6008213964926034296==--