Skip to contentSkip to conversation

video: imxfb: Fix retrieve values from DT

PATCH Superseded Alexander Shiyan 3 participants 9 messages Jul 21, 2013 – Jul 4, 2014

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 video: imxfb: Fix retrieve values from DT

Display settings should be retrieved from "display" node, not from root fb node. This patch fix this bug.

---
 drivers/video/imxfb.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)
drivers/video/imxfb.c +14 -12
index 38733ac..8e104c4 100644
@@ -753,12 +753,12 @@ static int imxfb_resume(struct platform_device *dev)
 #define imxfb_resume	NULL
 #endif
 
-static int imxfb_init_fbinfo(struct platform_device *pdev)
+static int imxfb_init_fbinfo(struct platform_device *pdev,
+			     struct device_node *np)
 {
 	struct imx_fb_platform_data *pdata = pdev->dev.platform_data;
 	struct fb_info *info = dev_get_drvdata(&pdev->dev);
 	struct imxfb_info *fbi = info->par;
-	struct device_node *np;
 
 	pr_debug("%s\n",__func__);
 
@@ -799,7 +799,6 @@ static int imxfb_init_fbinfo(struct platform_device *pdev)
 		fbi->lcd_power			= pdata->lcd_power;
 		fbi->backlight_power		= pdata->backlight_power;
 	} else {
-		np = pdev->dev.of_node;
 		info->var.grayscale = of_property_read_bool(np,
 						"cmap-greyscale");
 		fbi->cmap_inverse = of_property_read_bool(np, "cmap-inverse");
@@ -858,6 +857,7 @@ static int imxfb_of_read_mode(struct device *dev, struct device_node *np,
 
 static int imxfb_probe(struct platform_device *pdev)
 {
+	struct device_node *display_np = NULL;
 	struct imxfb_info *fbi;
 	struct fb_info *info;
 	struct imx_fb_platform_data *pdata;
@@ -887,7 +887,17 @@ static int imxfb_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, info);
 
-	ret = imxfb_init_fbinfo(pdev);
+	if (pdev->dev.of_node) {
+		display_np = of_parse_phandle(pdev->dev.of_node, "display", 0);
+		if (!display_np) {
+			dev_err(&pdev->dev,
+				"No display defined in devicetree\n");
+			ret = -EINVAL;
+			goto failed_init;
+		}
+	}
+
+	ret = imxfb_init_fbinfo(pdev, display_np);
 	if (ret < 0)
 		goto failed_init;
 
@@ -898,16 +908,8 @@ static int imxfb_probe(struct platform_device *pdev)
 		fbi->mode = pdata->mode;
 		fbi->num_modes = pdata->num_modes;
 	} else {
-		struct device_node *display_np;
 		fb_mode = NULL;
 
-		display_np = of_parse_phandle(pdev->dev.of_node, "display", 0);
-		if (!display_np) {
-			dev_err(&pdev->dev, "No display defined in devicetree\n");
-			ret = -EINVAL;
-			goto failed_of_parse;
-		}
-
 		/*
 		 * imxfb does not support more modes, we choose only the native
 		 * mode.
Signature · 1 line
1.8.1.5
#1 lore raw

PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register

This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.

---
 Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 +
 drivers/video/imxfb.c                                  | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1 -0
index 46da08d..be10c65 100644
@@ -18,6 +18,7 @@ Optional properties:
 - fsl,dmacr: DMA Control Register value. This is optional. By default, the
 	register is not modified as recommended by the datasheet.
 - fsl,lscr1: LCDC Sharp Configuration Register value.
+- fsl,pwmr: LCDC PWM Contrast Control Register value.
 
 Example:
 
drivers/video/imxfb.c +1 -1
index 8e104c4..d98299a 100644
@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev,
 
 		fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
 		of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
-
 		of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
+		of_property_read_u32(np, "fsl,pwmr", &fbi->pwmr);
 
 		/* These two function pointers could be used by some specific
 		 * platforms. */
Signature · 1 line
1.8.1.5
#2 lore raw

PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register

Hi,

Quoted 3 lines · Alexander Shiyan

This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.

http://www.spinics.net/lists/linux-fbdev/msg10002.html

Regards,

Markus

Quoted 37 lines
---
 Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 +
 drivers/video/imxfb.c                                  | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1 -0
index 46da08d..be10c65 100644
@@ -18,6 +18,7 @@ Optional properties:
 - fsl,dmacr: DMA Control Register value. This is optional. By default, the
 	register is not modified as recommended by the datasheet.
 - fsl,lscr1: LCDC Sharp Configuration Register value.
+- fsl,pwmr: LCDC PWM Contrast Control Register value.
 
 Example:
 
drivers/video/imxfb.c +1 -1
index 8e104c4..d98299a 100644
@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev,
 
 		fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
 		of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
-
 		of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
+		of_property_read_u32(np, "fsl,pwmr", &fbi->pwmr);
 
 		/* These two function pointers could be used by some specific
 		 * platforms. */
Signature · 1 line
1.8.1.5
Signature · 4 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
#3 lore raw

PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register

Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:

Hi,

Quoted 3 lines · Alexander Shiyan

This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.

http://www.spinics.net/lists/linux-fbdev/msg10002.html

PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.

[...]

Quoted 32 lines
Quoted 32 lines
---
 Documentation/devicetree/bindings/video/fsl,imx-fb.txt | 1 +
 drivers/video/imxfb.c                                  | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/video/fsl,imx-fb.txt +1 -0
index 46da08d..be10c65 100644
@@ -18,6 +18,7 @@ Optional properties:
 - fsl,dmacr: DMA Control Register value. This is optional. By default, the
 	register is not modified as recommended by the datasheet.
 - fsl,lscr1: LCDC Sharp Configuration Register value.
+- fsl,pwmr: LCDC PWM Contrast Control Register value.
 
 Example:
 
drivers/video/imxfb.c +1 -1
index 8e104c4..d98299a 100644
@@ -806,8 +806,8 @@ static int imxfb_init_fbinfo(struct platform_device *pdev,
 
 		fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
 		of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
-
 		of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
+		of_property_read_u32(np, "fsl,pwmr", &fbi->pwmr);
 
 		/* These two function pointers could be used by some specific
 		 * platforms. */
Signature · 1 line
Alexander Shiyan <[email protected]>
maintainer
#4 lore raw

PATCH 2/2 video: imxfb: Add feature to setup PWM Contrast Control Register

Quoted 12 lines · Alexander Shiyan
Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:

Hi,

Quoted 3 lines · Alexander Shiyan

This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.

http://www.spinics.net/lists/linux-fbdev/msg10002.html

Quoted 8 lines

PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.

Why should the contrast of a display not be adjustable?

Sascha

Signature · 4 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
#5 lore raw

Re: [PATCH 2/2] video: imxfb: Add feature to setup PWM Contrast Control Register

Quoted 22 lines · Alexander Shiyan
Quoted 12 lines
Quoted 8 lines · On Thu, 25 Jul 2013 15:38:56 +0200 Markus Pargmann <[email protected]> wrote:

Hi,

Quoted 3 lines · Alexander Shiyan

This patch adds feature to setup PWM Contrast Control Register. This register is used to control the signal output at the contrast pin, which controls contrast of the LCD panel.

http://www.spinics.net/lists/linux-fbdev/msg10002.html

Quoted 8 lines

PWM? I can not understand how the PWM driver will be connected to the framebuffer driver. It is not backlight, this is contrast.
Even if we imagine that the driver will be connected through phandle, then we will need to have at least 4! additional parameters in the framebuffer
driver: freq source, frequency and active pulse period + phandle to PWM. Is it worth it, given that these parameters should not be adjustable? On my opinion, the only one additional parameter in framebuffer is enough. Thanks.

Quoted 1 line

Why should the contrast of a display not be adjustable?

I still can not understand the interface through which it can be changed. Same as how the default settings can be passed to the framebuffer driver.

---

#6 lore raw

Re: [PATCH 2/2] video: clps711x: Fix sparse warnings

VHVlLCAxIEp1bCAyMDE0IDA5OjE0OjAyICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMjgvMDYvMTQgMDk6MzQsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUaGlzIHBhdGNoIGZpeGVzIGJlbG93IHdhcm5pbmdzOgo+ID4gQ0hFQ0sgICBk cml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmMKPiA+ICAgZHJpdmVycy92aWRlby9mYmRl di9jbHBzNzExeC1mYi5jOjI0NzoyNDogd2FybmluZzogaW5jb3JyZWN0IHR5cGUgaW4gYXJndW1l bnQgMSAoZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzKQo+ID4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2 L2NscHM3MTF4LWZiLmM6MjQ3OjI0OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+ICAg ZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0NzoyNDogICAgZ290IGNoYXIgW25v ZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBz NzExeC1mYi5jOjI0ODozNTogd2FybmluZzogaW5jb3JyZWN0IHR5cGUgaW4gYXJndW1lbnQgMSAo ZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2VzKQo+ID4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3 MTF4LWZiLmM6MjQ4OjM1OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+ICAgZHJpdmVy cy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0ODozNTogICAgZ290IGNoYXIgW25vZGVyZWZd IDxhc246Mj4qc2NyZWVuX2Jhc2UKLi4uCj4gPiAgCWluZm8tPnNjcmVlbl9iYXNlID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiA+IC0JaWYgKElTX0VSUihpbmZvLT5zY3JlZW5f YmFzZSkpIHsKPiA+IC0JCXJldCA9IFBUUl9FUlIoaW5mby0+c2NyZWVuX2Jhc2UpOwo+ID4gKwlp ZiAoSVNfRVJSKChfX2ZvcmNlIHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+ICsJCXJl dCA9IFBUUl9FUlIoKF9fZm9yY2Ugdm9pZCAqKWluZm8tPnNjcmVlbl9iYXNlKTsKPiAKPiBJIGRv bid0IHNlZSBhbnkgb3RoZXIgdXNlciBvZiBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoKSBoYXZpbmcg dGhhdCBraW5kCj4gb2YgY2FzdHMuIFdoeSBhcmUgdGhleSBuZWVkZWQgaGVyZT8KCk5vdCBuZWVk ZWQsIHR5cGUgY2FzdCB3YXMgZG9uZSBvbmx5IHRvIHJlbW92ZSBzcGFyc2Ugd2FybmluZ3MuCgot LS0KCg=

#7 lore raw

Re: [PATCH 2/2] video: clps711x: Fix sparse warnings

In reply to Alexander Shiyan

VHVlLCAxIEp1bCAyMDE0IDEzOjIyOjUxICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMDEvMDcvMTQgMDk6MjMsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUdWUsIDEgSnVsIDIwMTQgMDk6MTQ6MDIgKzAzMDAg0L7RgiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPjoKPiA+PiBPbiAyOC8wNi8xNCAwOTozNCwgQWxl eGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4gVGhpcyBwYXRjaCBmaXhlcyBiZWxvdyB3YXJuaW5n czoKPiA+Pj4gQ0hFQ0sgICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmMKPiA+Pj4g ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmM6MjQ3OjI0OiB3YXJuaW5nOiBpbmNv cnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+ ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0NzoyNDogICAgZXhwZWN0ZWQg dm9pZCBjb25zdCAqcHRyCj4gPj4+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5j OjI0NzoyNDogICAgZ290IGNoYXIgW25vZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+Pj4g ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZiLmM6MjQ4OjM1OiB3YXJuaW5nOiBpbmNv cnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+ ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5jOjI0ODozNTogICAgZXhwZWN0ZWQg dm9pZCBjb25zdCAqcHRyCj4gPj4+ICAgZHJpdmVycy92aWRlby9mYmRldi9jbHBzNzExeC1mYi5j OjI0ODozNTogICAgZ290IGNoYXIgW25vZGVyZWZdIDxhc246Mj4qc2NyZWVuX2Jhc2UKPiA+IC4u Lgo+ID4+PiAgCWluZm8tPnNjcmVlbl9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKPiA+Pj4gLQlpZiAoSVNfRVJSKGluZm8tPnNjcmVlbl9iYXNlKSkgewo+ID4+PiAtCQly ZXQgPSBQVFJfRVJSKGluZm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4gKwlpZiAoSVNfRVJSKChfX2Zv cmNlIHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+Pj4gKwkJcmV0ID0gUFRSX0VSUigo X19mb3JjZSB2b2lkICopaW5mby0+c2NyZWVuX2Jhc2UpOwo+ID4+Cj4gPj4gSSBkb24ndCBzZWUg YW55IG90aGVyIHVzZXIgb2YgZGV2bV9pb3JlbWFwX3Jlc291cmNlKCkgaGF2aW5nIHRoYXQga2lu ZAo+ID4+IG9mIGNhc3RzLiBXaHkgYXJlIHRoZXkgbmVlZGVkIGhlcmU/Cj4gPiAKPiA+IE5vdCBu ZWVkZWQsIHR5cGUgY2FzdCB3YXMgZG9uZSBvbmx5IHRvIHJlbW92ZSBzcGFyc2Ugd2FybmluZ3Mu Cj4gCj4gUmlnaHQsIGJ1dCBJIHRoaW5rIGVpdGhlciBzcGFyc2UgaXMgd3JvbmcgaGVyZSwgb3Ig dGhlIFBUUl9FUlIvSVNfRVJSCj4gYXJlIHdyb25nLiBZb3Ugc2hvdWxkbid0IGRvIHR5cGVjYXN0 cyBsaWtlIHRoYXQgdG8gaGlkZSB0aG9zZSB3YXJuaW5ncy4KCldlbGwsIEknbGwgcmVtb3ZlIHRo ZXNlIGNoYW5nZXMgYW5kIHNlbmQgYSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgcGF0Y2guCgotLS0K Cg=

#8 lore raw

Re: [PATCH 2/2] video: clps711x: Fix sparse warnings

In reply to Alexander Shiyan

RnJpLCA0IEp1bCAyMDE0IDExOjA2OjMxICswMzAwINC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT46Cj4gT24gMDEvMDcvMTQgMTM6MzEsIEFsZXhhbmRlciBTaGl5YW4g d3JvdGU6Cj4gPiBUdWUsIDEgSnVsIDIwMTQgMTM6MjI6NTEgKzAzMDAg0L7RgiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPjoKPiA+PiBPbiAwMS8wNy8xNCAwOToyMywgQWxl eGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4gVHVlLCAxIEp1bCAyMDE0IDA5OjE0OjAyICswMzAw INC+0YIgVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT46Cj4gPj4+PiBPbiAy OC8wNi8xNCAwOTozNCwgQWxleGFuZGVyIFNoaXlhbiB3cm90ZToKPiA+Pj4+PiBUaGlzIHBhdGNo IGZpeGVzIGJlbG93IHdhcm5pbmdzOgo+ID4+Pj4+IENIRUNLICAgZHJpdmVycy92aWRlby9mYmRl di9jbHBzNzExeC1mYi5jCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4LWZi LmM6MjQ3OjI0OiB3YXJuaW5nOiBpbmNvcnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChkaWZmZXJl bnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3MTF4 LWZiLmM6MjQ3OjI0OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+Pj4+PiAgIGRyaXZl cnMvdmlkZW8vZmJkZXYvY2xwczcxMXgtZmIuYzoyNDc6MjQ6ICAgIGdvdCBjaGFyIFtub2RlcmVm XSA8YXNuOjI+KnNjcmVlbl9iYXNlCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NscHM3 MTF4LWZiLmM6MjQ4OjM1OiB3YXJuaW5nOiBpbmNvcnJlY3QgdHlwZSBpbiBhcmd1bWVudCAxIChk aWZmZXJlbnQgYWRkcmVzcyBzcGFjZXMpCj4gPj4+Pj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2Ns cHM3MTF4LWZiLmM6MjQ4OjM1OiAgICBleHBlY3RlZCB2b2lkIGNvbnN0ICpwdHIKPiA+Pj4+PiAg IGRyaXZlcnMvdmlkZW8vZmJkZXYvY2xwczcxMXgtZmIuYzoyNDg6MzU6ICAgIGdvdCBjaGFyIFtu b2RlcmVmXSA8YXNuOjI+KnNjcmVlbl9iYXNlCj4gPj4+IC4uLgo+ID4+Pj4+ICAJaW5mby0+c2Ny ZWVuX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ID4+Pj4+IC0JaWYg KElTX0VSUihpbmZvLT5zY3JlZW5fYmFzZSkpIHsKPiA+Pj4+PiAtCQlyZXQgPSBQVFJfRVJSKGlu Zm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4+PiArCWlmIChJU19FUlIoKF9fZm9yY2Ugdm9pZCAqKWlu Zm8tPnNjcmVlbl9iYXNlKSkgewo+ID4+Pj4+ICsJCXJldCA9IFBUUl9FUlIoKF9fZm9yY2Ugdm9p ZCAqKWluZm8tPnNjcmVlbl9iYXNlKTsKPiA+Pj4+Cj4gPj4+PiBJIGRvbid0IHNlZSBhbnkgb3Ro ZXIgdXNlciBvZiBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoKSBoYXZpbmcgdGhhdCBraW5kCj4gPj4+ PiBvZiBjYXN0cy4gV2h5IGFyZSB0aGV5IG5lZWRlZCBoZXJlPwo+ID4+Pgo+ID4+PiBOb3QgbmVl ZGVkLCB0eXBlIGNhc3Qgd2FzIGRvbmUgb25seSB0byByZW1vdmUgc3BhcnNlIHdhcm5pbmdzLgo+ ID4+Cj4gPj4gUmlnaHQsIGJ1dCBJIHRoaW5rIGVpdGhlciBzcGFyc2UgaXMgd3JvbmcgaGVyZSwg b3IgdGhlIFBUUl9FUlIvSVNfRVJSCj4gPj4gYXJlIHdyb25nLiBZb3Ugc2hvdWxkbid0IGRvIHR5 cGVjYXN0cyBsaWtlIHRoYXQgdG8gaGlkZSB0aG9zZSB3YXJuaW5ncy4KPiA+IAo+ID4gV2VsbCwg SSdsbCByZW1vdmUgdGhlc2UgY2hhbmdlcyBhbmQgc2VuZCBhIHNlY29uZCB2ZXJzaW9uIG9mIHRo ZSBwYXRjaC4KPiAKPiBJIGFwcGxpZWQgdGhlc2UgdHdvIHBhdGNoZXMsIGFuZCByZW1vdmVkIHRo ZSB0eXBlIGNhc3RzIGZyb20gdGhlIHNlY29uZCBvbmUuCgpPSywgVGhhbmtzIQoKLS0tCgo