From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 5D89F5A2D for ; Thu, 12 Mar 2015 11:57:33 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP; 12 Mar 2015 03:51:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,388,1422950400"; d="scan'208";a="691009150" Received: from pgsmsx107.gar.corp.intel.com ([10.221.44.105]) by fmsmga002.fm.intel.com with ESMTP; 12 Mar 2015 03:57:27 -0700 Received: from kmsmsx154.gar.corp.intel.com (172.21.73.14) by PGSMSX107.gar.corp.intel.com (10.221.44.105) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 12 Mar 2015 18:57:26 +0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.110.14) by KMSMSX154.gar.corp.intel.com (172.21.73.14) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 12 Mar 2015 18:57:26 +0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.150]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.45]) with mapi id 14.03.0224.002; Thu, 12 Mar 2015 18:57:19 +0800 From: "Qiu, Michael" To: "Richardson, Bruce" , Tetsuya Mukawa Thread-Topic: [dpdk-dev] [PATCH v2 01/15] eal: Fix cording style of eal_pci.c and eal_pci_uio.c Thread-Index: AQHQXLJMym/Xcx2/bUG8a+N7NsVJmw== Date: Thu, 12 Mar 2015 10:57:18 +0000 Message-ID: <533710CFB86FA344BFBF2D6802E60286D02B86@SHSMSX101.ccr.corp.intel.com> References: <1425438703-18895-1-git-send-email-mukawa@igel.co.jp> <1426155474-1596-1-git-send-email-mukawa@igel.co.jp> <1426155474-1596-2-git-send-email-mukawa@igel.co.jp> <20150312104850.GA10100@bricha3-MOBL3> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v2 01/15] eal: Fix cording style of eal_pci.c and eal_pci_uio.c X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Mar 2015 10:57:34 -0000 On 3/12/2015 6:50 PM, Bruce Richardson wrote:=0A= > On Thu, Mar 12, 2015 at 07:17:40PM +0900, Tetsuya Mukawa wrote:=0A= >> This patch fixes cording style of below files in linuxapp and bsdapp.=0A= >> - eal_pci.c=0A= >> - eal_pci_uio.c=0A= >>=0A= >> Signed-off-by: Tetsuya Mukawa =0A= > Hi Tetsuya,=0A= >=0A= > While there is some good cleanup here, I disagree with a number of the ch= anges=0A= > made purely to the whitespace in the file. The style of using a double-in= dent=0A= > for line continuations is very widely used in DPDK code, much more so tha= n the=0A= > style of lining things up with the previous line.=0A= =0A= Yes, but both style are seeing in dpdk, here the patch is using Tab +=0A= whitespace, which is also=0A= the linux kernel's style.=0A= =0A= So is there any rule to allow only one style?=0A= Mixed style is bad...=0A= =0A= Thanks,=0A= Michael=0A= > So ack to the changes removing unnecessary braces, and occasional splitti= ng of=0A= > really long lines (though a few chars over 80 is ok). NAK to the whitespa= ce=0A= > and indentation changes.=0A= >=0A= > Regards,=0A= > /Bruce=0A= >=0A= >> ---=0A= >> lib/librte_eal/bsdapp/eal/eal_pci.c | 67 ++++++++++++++++++------= -------=0A= >> lib/librte_eal/linuxapp/eal/eal_pci.c | 32 +++++++++------=0A= >> lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 37 ++++++++++-------=0A= >> 3 files changed, 80 insertions(+), 56 deletions(-)=0A= >>=0A= >> diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp= /eal/eal_pci.c=0A= >> index fe3ef86..cbd0a4e 100644=0A= >> --- a/lib/librte_eal/bsdapp/eal/eal_pci.c=0A= >> +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c=0A= >> @@ -142,8 +142,9 @@ pci_map_resource(void *requested_addr, const char *d= evname, off_t offset,=0A= >> MAP_SHARED, fd, offset);=0A= >> close(fd);=0A= >> if (mapaddr =3D=3D MAP_FAILED ||=0A= >> - (requested_addr !=3D NULL && mapaddr !=3D requested_addr)) {=0A= >> - RTE_LOG(ERR, EAL, "%s(): cannot mmap(%s(%d), %p, 0x%lx, 0x%lx):"=0A= >> + (requested_addr !=3D NULL && mapaddr !=3D requested_addr)) {=0A= >> + RTE_LOG(ERR, EAL,=0A= >> + "%s(): cannot mmap(%s(%d), %p, 0x%lx, 0x%lx):"=0A= >> " %s (%p)\n", __func__, devname, fd, requested_addr,=0A= >> (unsigned long)size, (unsigned long)offset,=0A= >> strerror(errno), mapaddr);=0A= >> @@ -161,9 +162,10 @@ fail:=0A= >> static int=0A= >> pci_uio_map_secondary(struct rte_pci_device *dev)=0A= >> {=0A= >> - size_t i;=0A= >> - struct uio_resource *uio_res;=0A= >> - struct uio_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_tailq.hea= d, uio_res_list);=0A= >> + size_t i;=0A= >> + struct uio_resource *uio_res;=0A= >> + struct uio_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, uio_res_list);=0A= >> =0A= >> TAILQ_FOREACH(uio_res, uio_res_list, next) {=0A= >> =0A= >> @@ -179,10 +181,10 @@ pci_uio_map_secondary(struct rte_pci_device *dev)= =0A= >> !=3D uio_res->maps[i].addr) {=0A= >> RTE_LOG(ERR, EAL,=0A= >> "Cannot mmap device resource\n");=0A= >> - return (-1);=0A= >> + return -1;=0A= >> }=0A= >> }=0A= >> - return (0);=0A= >> + return 0;=0A= >> }=0A= >> =0A= >> RTE_LOG(ERR, EAL, "Cannot find resource for device\n");=0A= >> @@ -201,7 +203,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> uint64_t pagesz;=0A= >> struct rte_pci_addr *loc =3D &dev->addr;=0A= >> struct uio_resource *uio_res;=0A= >> - struct uio_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_tailq.hea= d, uio_res_list);=0A= >> + struct uio_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, uio_res_list);=0A= >> struct uio_map *maps;=0A= >> =0A= >> dev->intr_handle.fd =3D -1;=0A= >> @@ -209,14 +212,16 @@ pci_uio_map_resource(struct rte_pci_device *dev)= =0A= >> =0A= >> /* secondary processes - use already recorded details */=0A= >> if (rte_eal_process_type() !=3D RTE_PROC_PRIMARY)=0A= >> - return (pci_uio_map_secondary(dev));=0A= >> + return pci_uio_map_secondary(dev);=0A= >> =0A= >> snprintf(devname, sizeof(devname), "/dev/uio@pci:%u:%u:%u",=0A= >> dev->addr.bus, dev->addr.devid, dev->addr.function);=0A= >> =0A= >> if (access(devname, O_RDWR) < 0) {=0A= >> - RTE_LOG(WARNING, EAL, " "PCI_PRI_FMT" not managed by UIO driver, "= =0A= >> - "skipping\n", loc->domain, loc->bus, loc->devid, loc->function);=0A= >> + RTE_LOG(WARNING, EAL,=0A= >> + " "PCI_PRI_FMT" not managed by UIO driver, "=0A= >> + "skipping\n", loc->domain, loc->bus,=0A= >> + loc->devid, loc->function);=0A= >> return 1;=0A= >> }=0A= >> =0A= >> @@ -233,7 +238,7 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> if ((uio_res =3D rte_zmalloc("UIO_RES", sizeof (*uio_res), 0)) =3D=3D = NULL) {=0A= >> RTE_LOG(ERR, EAL,=0A= >> "%s(): cannot store uio mmap details\n", __func__);=0A= >> - return (-1);=0A= >> + return -1;=0A= >> }=0A= >> =0A= >> snprintf(uio_res->path, sizeof(uio_res->path), "%s", devname);=0A= >> @@ -248,7 +253,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> =0A= >> j =3D uio_res->nb_maps;=0A= >> /* skip empty BAR */=0A= >> - if ((phaddr =3D dev->mem_resource[i].phys_addr) =3D=3D 0)=0A= >> + phaddr =3D dev->mem_resource[i].phys_addr;=0A= >> + if (phaddr =3D=3D 0)=0A= >> continue;=0A= >> =0A= >> /* if matching map is found, then use it */=0A= >> @@ -261,7 +267,7 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> (size_t)maps[j].size)=0A= >> ) =3D=3D NULL) {=0A= >> rte_free(uio_res);=0A= >> - return (-1);=0A= >> + return -1;=0A= >> }=0A= >> =0A= >> maps[j].addr =3D mapaddr;=0A= >> @@ -271,7 +277,7 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> =0A= >> TAILQ_INSERT_TAIL(uio_res_list, uio_res, next);=0A= >> =0A= >> - return (0);=0A= >> + return 0;=0A= >> }=0A= >> =0A= >> /* Scan one pci sysfs entry, and fill the devices list from it. */=0A= >> @@ -311,7 +317,7 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf)= =0A= >> /* FreeBSD has no NUMA support (yet) */=0A= >> dev->numa_node =3D 0;=0A= >> =0A= >> -/* parse resources */=0A= >> + /* parse resources */=0A= >> switch (conf->pc_hdr & PCIM_HDRTYPE) {=0A= >> case PCIM_HDRTYPE_NORMAL:=0A= >> max =3D PCIR_MAX_BAR_0;=0A= >> @@ -440,32 +446,37 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver= *dr, struct rte_pci_device *d=0A= >> =0A= >> /* check if device's identifiers match the driver's ones */=0A= >> if (id_table->vendor_id !=3D dev->id.vendor_id &&=0A= >> - id_table->vendor_id !=3D PCI_ANY_ID)=0A= >> + id_table->vendor_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> if (id_table->device_id !=3D dev->id.device_id &&=0A= >> - id_table->device_id !=3D PCI_ANY_ID)=0A= >> + id_table->device_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> - if (id_table->subsystem_vendor_id !=3D dev->id.subsystem_vendor_id &&= =0A= >> - id_table->subsystem_vendor_id !=3D PCI_ANY_ID)=0A= >> + if (id_table->subsystem_vendor_id !=3D=0A= >> + dev->id.subsystem_vendor_id &&=0A= >> + id_table->subsystem_vendor_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> - if (id_table->subsystem_device_id !=3D dev->id.subsystem_device_id &&= =0A= >> - id_table->subsystem_device_id !=3D PCI_ANY_ID)=0A= >> + if (id_table->subsystem_device_id !=3D=0A= >> + dev->id.subsystem_device_id &&=0A= >> + id_table->subsystem_device_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> =0A= >> struct rte_pci_addr *loc =3D &dev->addr;=0A= >> =0A= >> - RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",= =0A= >> - loc->domain, loc->bus, loc->devid, loc->function,=0A= >> - dev->numa_node);=0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",=0A= >> + loc->domain, loc->bus, loc->devid, loc->function,=0A= >> + dev->numa_node);=0A= >> =0A= >> - RTE_LOG(DEBUG, EAL, " probe driver: %x:%x %s\n", dev->id.vendor_id,= =0A= >> - dev->id.device_id, dr->name);=0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + " probe driver: %x:%x %s\n", dev->id.vendor_id,=0A= >> + dev->id.device_id, dr->name);=0A= >> =0A= >> /* no initialization when blacklisted, return without error */=0A= >> if (dev->devargs !=3D NULL &&=0A= >> dev->devargs->type =3D=3D RTE_DEVTYPE_BLACKLISTED_PCI) {=0A= >> =0A= >> - RTE_LOG(DEBUG, EAL, " Device is blacklisted, not initializing\n");= =0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + " Device is blacklisted, not initializing\n");=0A= >> return 0;=0A= >> }=0A= >> =0A= >> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linu= xapp/eal/eal_pci.c=0A= >> index 83c589e..353b0b8 100644=0A= >> --- a/lib/librte_eal/linuxapp/eal/eal_pci.c=0A= >> +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c=0A= >> @@ -154,7 +154,8 @@ pci_map_resource(void *requested_addr, int fd, off_t= offset, size_t size,=0A= >> mapaddr =3D mmap(requested_addr, size, PROT_READ | PROT_WRITE,=0A= >> MAP_SHARED | additional_flags, fd, offset);=0A= >> if (mapaddr =3D=3D MAP_FAILED) {=0A= >> - RTE_LOG(ERR, EAL, "%s(): cannot mmap(%d, %p, 0x%lx, 0x%lx): %s (%p)\n= ",=0A= >> + RTE_LOG(ERR, EAL,=0A= >> + "%s(): cannot mmap(%d, %p, 0x%lx, 0x%lx): %s (%p)\n",=0A= >> __func__, fd, requested_addr,=0A= >> (unsigned long)size, (unsigned long)offset,=0A= >> strerror(errno), mapaddr);=0A= >> @@ -631,31 +632,36 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver= *dr, struct rte_pci_device *d=0A= >> =0A= >> /* check if device's identifiers match the driver's ones */=0A= >> if (id_table->vendor_id !=3D dev->id.vendor_id &&=0A= >> - id_table->vendor_id !=3D PCI_ANY_ID)=0A= >> + id_table->vendor_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> if (id_table->device_id !=3D dev->id.device_id &&=0A= >> - id_table->device_id !=3D PCI_ANY_ID)=0A= >> + id_table->device_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> - if (id_table->subsystem_vendor_id !=3D dev->id.subsystem_vendor_id &&= =0A= >> - id_table->subsystem_vendor_id !=3D PCI_ANY_ID)=0A= >> + if (id_table->subsystem_vendor_id !=3D=0A= >> + dev->id.subsystem_vendor_id &&=0A= >> + id_table->subsystem_vendor_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> - if (id_table->subsystem_device_id !=3D dev->id.subsystem_device_id &&= =0A= >> - id_table->subsystem_device_id !=3D PCI_ANY_ID)=0A= >> + if (id_table->subsystem_device_id !=3D=0A= >> + dev->id.subsystem_device_id &&=0A= >> + id_table->subsystem_device_id !=3D PCI_ANY_ID)=0A= >> continue;=0A= >> =0A= >> struct rte_pci_addr *loc =3D &dev->addr;=0A= >> =0A= >> - RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",= =0A= >> - loc->domain, loc->bus, loc->devid, loc->function,=0A= >> - dev->numa_node);=0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",=0A= >> + loc->domain, loc->bus, loc->devid, loc->function,=0A= >> + dev->numa_node);=0A= >> =0A= >> - RTE_LOG(DEBUG, EAL, " probe driver: %x:%x %s\n", dev->id.vendor_id,= =0A= >> - dev->id.device_id, dr->name);=0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + " probe driver: %x:%x %s\n", dev->id.vendor_id,=0A= >> + dev->id.device_id, dr->name);=0A= >> =0A= >> /* no initialization when blacklisted, return without error */=0A= >> if (dev->devargs !=3D NULL &&=0A= >> dev->devargs->type =3D=3D RTE_DEVTYPE_BLACKLISTED_PCI) {=0A= >> - RTE_LOG(DEBUG, EAL, " Device is blacklisted, not initializing\n");= =0A= >> + RTE_LOG(DEBUG, EAL,=0A= >> + " Device is blacklisted, not initializing\n");=0A= >> return 1;=0A= >> }=0A= >> =0A= >> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/= linuxapp/eal/eal_pci_uio.c=0A= >> index 2d1c69b..6f229d6 100644=0A= >> --- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c=0A= >> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c=0A= >> @@ -92,7 +92,8 @@ pci_uio_map_secondary(struct rte_pci_device *dev)=0A= >> {=0A= >> int fd, i;=0A= >> struct mapped_pci_resource *uio_res;=0A= >> - struct mapped_pci_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_ta= ilq.head, mapped_pci_res_list);=0A= >> + struct mapped_pci_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list);=0A= >> =0A= >> TAILQ_FOREACH(uio_res, uio_res_list, next) {=0A= >> =0A= >> @@ -117,14 +118,16 @@ pci_uio_map_secondary(struct rte_pci_device *dev)= =0A= >> if (mapaddr !=3D uio_res->maps[i].addr) {=0A= >> if (mapaddr =3D=3D MAP_FAILED)=0A= >> RTE_LOG(ERR, EAL,=0A= >> - "Cannot mmap device resource file %s: %s\n",=0A= >> - uio_res->maps[i].path,=0A= >> - strerror(errno));=0A= >> + "Cannot mmap device resource "=0A= >> + "file %s: %s\n",=0A= >> + uio_res->maps[i].path,=0A= >> + strerror(errno));=0A= >> else=0A= >> RTE_LOG(ERR, EAL,=0A= >> - "Cannot mmap device resource file %s to address: %p\n",=0A= >> - uio_res->maps[i].path,=0A= >> - uio_res->maps[i].addr);=0A= >> + "Cannot mmap device resource "=0A= >> + "file %s to address: %p\n",=0A= >> + uio_res->maps[i].path,=0A= >> + uio_res->maps[i].addr);=0A= >> =0A= >> close(fd);=0A= >> return -1;=0A= >> @@ -272,7 +275,8 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> uint64_t phaddr;=0A= >> struct rte_pci_addr *loc =3D &dev->addr;=0A= >> struct mapped_pci_resource *uio_res;=0A= >> - struct mapped_pci_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_ta= ilq.head, mapped_pci_res_list);=0A= >> + struct mapped_pci_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list);=0A= >> struct pci_map *maps;=0A= >> =0A= >> dev->intr_handle.fd =3D -1;=0A= >> @@ -286,8 +290,10 @@ pci_uio_map_resource(struct rte_pci_device *dev)=0A= >> /* find uio resource */=0A= >> uio_num =3D pci_get_uio_dev(dev, dirname, sizeof(dirname));=0A= >> if (uio_num < 0) {=0A= >> - RTE_LOG(WARNING, EAL, " "PCI_PRI_FMT" not managed by UIO driver, "= =0A= >> - "skipping\n", loc->domain, loc->bus, loc->devid, loc->function);=0A= >> + RTE_LOG(WARNING, EAL,=0A= >> + " "PCI_PRI_FMT" not managed by UIO driver, "=0A= >> + "skipping\n", loc->domain, loc->bus,=0A= >> + loc->devid, loc->function);=0A= >> return 1;=0A= >> }=0A= >> snprintf(devname, sizeof(devname), "/dev/uio%u", uio_num);=0A= >> @@ -338,12 +344,11 @@ pci_uio_map_resource(struct rte_pci_device *dev)= =0A= >> if (phaddr =3D=3D 0)=0A= >> continue;=0A= >> =0A= >> -=0A= >> /* update devname for mmap */=0A= >> snprintf(devname, sizeof(devname),=0A= >> SYSFS_PCI_DEVICES "/" PCI_PRI_FMT "/resource%d",=0A= >> - loc->domain, loc->bus, loc->devid, loc->function,=0A= >> - i);=0A= >> + loc->domain, loc->bus, loc->devid,=0A= >> + loc->function, i);=0A= >> =0A= >> /*=0A= >> * open resource file, to mmap it=0A= >> @@ -412,7 +417,8 @@ static struct mapped_pci_resource *=0A= >> pci_uio_find_resource(struct rte_pci_device *dev)=0A= >> {=0A= >> struct mapped_pci_resource *uio_res;=0A= >> - struct mapped_pci_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_ta= ilq.head, mapped_pci_res_list);=0A= >> + struct mapped_pci_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list);=0A= >> =0A= >> if (dev =3D=3D NULL)=0A= >> return NULL;=0A= >> @@ -431,7 +437,8 @@ void=0A= >> pci_uio_unmap_resource(struct rte_pci_device *dev)=0A= >> {=0A= >> struct mapped_pci_resource *uio_res;=0A= >> - struct mapped_pci_res_list *uio_res_list =3D RTE_TAILQ_CAST(rte_uio_ta= ilq.head, mapped_pci_res_list);=0A= >> + struct mapped_pci_res_list *uio_res_list =3D=0A= >> + RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list);=0A= >> =0A= >> if (dev =3D=3D NULL)=0A= >> return;=0A= >> -- =0A= >> 1.9.1=0A= >>=0A= =0A=